注:閱讀此篇時(shí)奴迅,請(qǐng)確保你的開發(fā)環(huán)境已經(jīng)正常配置,可以正常使用命令行工具創(chuàng)建插件demo
簡介
Confluence插件開發(fā)過程中需要保存一下常用配置數(shù)據(jù),如過配置信息不會(huì)修改可以直接保存到配置文件中饼灿,假設(shè)需要將部分?jǐn)?shù)據(jù)持久化保存,那就需要使用到數(shù)據(jù)庫厅克。
本篇說明Confluence后端使用Mysql數(shù)據(jù)庫情況下赔退,插件內(nèi)對(duì)表操作方法。
Mysql 插件表創(chuàng)建注意事項(xiàng)
參照上述文檔配置Confluence連接mysql证舟,需要注意的是
需要注意的是Mysql connector/J 驅(qū)動(dòng)包c(diǎn)onfluence沒有內(nèi)置硕旗,部署的時(shí)候需要自行增加jar包
詳細(xì)說明
創(chuàng)建表
在confluence連接的mysql中創(chuàng)建一個(gè)插件的表,舉例:
CREATE TABLE IF NOT EXISTS `plugin-demo-config` (
`id` INT(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`user_name` VARCHAR(30) NOT NULL COMMENT '用戶姓名',
`exattr` VARCHAR(512) DEFAULT NULL COMMENT '備注',
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_s_uc` (`status`, `user_code`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '插件示例配置表';
建表語句中的charset需要根據(jù)confluence判斷是否有問題女责,
Confluence 7.3以及之后的版本漆枚,連接的MySQL版本在5.7.9以及之后的版本,表字符集可以使用utfmb8
Confluence 7.2以及更早版本抵知,連接Mysql5.6版本必須要使用utf8
為了保險(xiǎn)起見使用utf8
使用TransactionalExecutorFactory對(duì)象操作DB
- 從confluence中獲取TransactionalExecutorFactory對(duì)象
- 獲取Connection對(duì)象
- 執(zhí)行sql語句
示例:
使用ComponentImport注解注入TransactionalExecutorFactory對(duì)象
@Scanned
public class VivoNotificationListener {
private static final Logger LOGGER = LoggerFactory.getLogger(VivoNotificationListener.class);
private TransactionalExecutorFactory executorFactory;
@Autowired
public VivoNotificationListener(@ComponentImport TransactionalExecutorFactory executorFactory,) {
this.executorFactory = executorFactory;
}
}
獲取Connection執(zhí)行sql
public List<ConfigDao> getUserConfigFromDB() {
List<ConfigDao> result = new LinkedList<>();
// createReadOnly獲取只讀的connection墙基,如果需要讀寫connection 可以使用 create()
TransactionalExecutor executor = this.executorFactory.createReadOnly();
executor.execute(conn -> {
try {
String sql = "select id, user_name as userName, exattr from `plugin-demo-config`";
PreparedStatement statement = conn.prepareStatement(sql);
ResultSet rs = statement.executeQuery();
while (rs.next()) {
int id = rs.getInt(1);
String userName = rs.getString(2);
String exattr = rs.getString(3);
ConfigDao configDao = new ConfigDao();
configDao.setId(id);
configDao.setUserName(userName);
configDao.setExattr(exattr);
result.add(configDao);
}
} catch (SQLException e) {
LOGGER.error("UserService getUserConfig sql exception.", e);
}
return "";
}
);
return result;
}
示例代碼
https://github.com/chaoyz/plugin-demo
參考
Confluence Data Model
Database Setup For MySQL
Example Plugins That Access RDBMS