注:阅读此篇时,请确保你的开发环境已经正常配置,可以正常使用命令行工具创建插件demo
简介
Confluence插件开发过程中需要保存一下常用配置数据,如过配置信息不会修改可以直接保存到配置文件中,假设需要将部分数据持久化保存,那就需要使用到数据库。
本篇说明Confluence后端使用Mysql数据库情况下,插件内对表操作方法。
Mysql 插件表创建注意事项
参照上述文档配置Confluence连接mysql,需要注意的是
需要注意的是Mysql connector/J 驱动包confluence没有内置,部署的时候需要自行增加jar包
详细说明
创建表
在confluence连接的mysql中创建一个插件的表,举例:
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需要根据confluence判断是否有问题,
Confluence 7.3以及之后的版本,连接的MySQL版本在5.7.9以及之后的版本,表字符集可以使用utfmb8
Confluence 7.2以及更早版本,连接Mysql5.6版本必须要使用utf8
为了保险起见使用utf8
使用TransactionalExecutorFactory对象操作DB
- 从confluence中获取TransactionalExecutorFactory对象
- 获取Connection对象
- 执行sql语句
示例:
使用ComponentImport注解注入TransactionalExecutorFactory对象
@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执行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
网友评论