美文网首页
Confluence插件开发 - 3 - MySQL数据如何操作

Confluence插件开发 - 3 - MySQL数据如何操作

作者: chaoyz | 来源:发表于2020-04-17 22:19 被阅读0次

    注:阅读此篇时,请确保你的开发环境已经正常配置,可以正常使用命令行工具创建插件demo

    简介

    Confluence插件开发过程中需要保存一下常用配置数据,如过配置信息不会修改可以直接保存到配置文件中,假设需要将部分数据持久化保存,那就需要使用到数据库。

    本篇说明Confluence后端使用Mysql数据库情况下,插件内对表操作方法。

    Mysql 插件表创建注意事项

    官方DB设置文档

    参照上述文档配置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

    相关文章

      网友评论

          本文标题:Confluence插件开发 - 3 - MySQL数据如何操作

          本文链接:https://www.haomeiwen.com/subject/yktpvhtx.html