专业的编程技术博客社区

网站首页 > 博客文章 正文

Spring Cloud初探之nacos-2.3.0适配postgresql数据库(一)

baijin 2025-05-02 08:55:17 博客文章 4 ℃ 0 评论

一、背景说明

Nacos是Spring cloud alibaba套件中用于管理服务注册的组件,默认支持的数据库是mysql。由于众所周知的原因,现在很多公司在用postgresql数据库替换原来的mysql。ncaos在2.X版本后可以通过插件支持potsgresql数据库, 但在使用过程中可能也会遇到一些问题。

下面从修改nacos源码适配的角度,看一下如果通过修改少量代码就可以支持postgresql。nacos本身的开源协议是支持修改分发的。

文章末尾有修改后的源码github仓库链接和打好的软件包。如果不想改代码,也可以直接下载软件zip包使用。

涉及源码修改的地方都加了注释:add by neo 。下载代码后,可以在IDEA全文搜索add by neo,找出所有修改的点。

二、环境准备

1. 下载源代码

打开nacos的github仓库,选择2.3.0 tag下载代码:Release 2.3.0 (Nov 30, 2023) · alibaba/nacos · GitHub

2. 编译源码

用IDEA打开项目。配置好maven编译的setting文件,编译使用JDK1.8。在IDEA的terminal窗口使用如下命令编译:

mvn ‘-Prelease-nacos’ clean install ‘-Dmaven.test.skip=true’ ‘-Dcheckstyle.skip=true’

注:跳过测试代码和规范性检查,-Prelease-nacos 参数指定构建完整的发布包。

编译后的软件包存放在distribution文件夹下。

3. 初始化postgresql的nacos数据库

  1. 用navicat或者pgadmin连上postgresql,新建一个nacos数据库。
  2. 从nacos-plugin项目中取数据库参数化脚本,执行脚本新建表。

初始化脚本所在位置:
nacos-plugin/nacos-datasource-plugin-ext/nacos-postgresql-datasource-plugin-ext/src/main/resources/schema at develop · nacos-group/nacos-plugin · GitHub

三、修改代码适配postgresql数据库

1. 在父模块的pom文件中增加依赖的postgresql包版本信息

            <!--add by neo-->
            <dependency>
                <groupId>org.postgresql</groupId>
                <artifactId>postgresql</artifactId>
                <version>42.3.3</version>
            </dependency>

2. 在config模块和persistence模块得pom文件中增加postgresql包依赖

在父模块中已经指定了版本号,子模块中添加依赖时不用再指定版本。

        <!--add by neo-->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>

3. 在PersistenceConstant.java中增加数据源定义POSTGRESQL

    public static final String MYSQL = "mysql";
    
    public static final String DERBY = "derby";

    /**
     * add by neo
     */
    public static final String POSTGRESQL = "postgresql";

4. 在AuthPageConstant.java中增加分页常量定义

    /**
     * add by neo
     */
    public static final String OFFSET_LIMIT = "OFFSET ? LIMIT ?";

5. 在DataSourceConstant.java中增加数据源常量定义

public class DataSourceConstant {
    public static final String MYSQL = "mysql";
    
    public static final String DERBY = "derby";

    /**
     * add by neo
     */
    public static final String POSTGRESQL = "postgresql";
}

6. 增加访问PG数据库的mapper文件

6.1 新建一个postgres包,拷贝mysql下的所有文件到postgres下,改一下名称

修改位置在plugin模块的datasource下面,位置参见截图

6.2 修改拷贝的所有mapper中的分页条件和返回的数据源。

mysql分页查询SQL语句和postgresql不一样。

注意:一定要修改getDataSource()的返回值为
DataSourceConstant.POSTGRESQL ,从mysql下拷贝的文件默认是返回mysql数据源的。

7. 增加postgresql分页查询适配器

可以拷贝一份plugin-default-impl模块的
MysqlPageHandlerAdapter.java, 修改为
PostgreSqlPageHandlerAdapter.java。

文件的位置见截图:

完整代码可以取文末的github地址代码查看,需要修改数据源和分页常量定义。

8. 添加初始化适配器代码


PageHandlerAdapterFactory.java的initHandlerAdapters()方法中增加一行代码:

    /**
     * init handler adapters.
     */
    private void initHandlerAdapters() {
        // MysqlPageHandlerAdapter
        addHandlerAdapter(new MysqlPageHandlerAdapter());

        /**
         * add by neo
         */
        addHandlerAdapter(new PostgreSqlPageHandlerAdapter());

        // DerbyPageHandlerAdapter
        addHandlerAdapter(new DerbyPageHandlerAdapter());
        // DefaultPageHandlerAdapter
        addHandlerAdapter(new DerbyPageHandlerAdapter());
    }

9. 在plugin模块中增加适配postgresql数据库的mapper

9.1 修改文件的位置如下:

9.2 添加的内容如下

# add by neo
com.alibaba.nacos.plugin.datasource.impl.postgres.ConfigInfoAggrMapperByPg
com.alibaba.nacos.plugin.datasource.impl.postgres.ConfigInfoBetaMapperByPg
com.alibaba.nacos.plugin.datasource.impl.postgres.ConfigInfoMapperByPg
com.alibaba.nacos.plugin.datasource.impl.postgres.ConfigInfoTagMapperByPg
com.alibaba.nacos.plugin.datasource.impl.postgres.ConfigTagsRelationMapperByPg
com.alibaba.nacos.plugin.datasource.impl.postgres.GroupCapacityMapperByPg
com.alibaba.nacos.plugin.datasource.impl.postgres.HistoryConfigInfoMapperByPg
com.alibaba.nacos.plugin.datasource.impl.postgres.TenantCapacityMapperByPg
com.alibaba.nacos.plugin.datasource.impl.postgres.TenantInfoMapperByPg

四、打包部署

  1. 采用步骤二中描述的mvn命令打包,解压nacos-server-2.3.0.zip后得到一个nacos文件夹。
  2. 修改配置文件nacos/conf/application.properties中的数据库IP、用户名、密码.
  1. 进入nacos\bin目录,使用单机模式启动
  1. 在浏览器中输入 http://localhost:8848/nacos 可以打开nacos操作。

五、本地调试nacos

在nacos软件包中,有一个console模块,可以在IDEA中启动调试。处理bug,修改代码后在本地调试一下很方便。启动如发现某个模块代码编译报错,可以同mvn先编译一下该模块。我第一次调试时就遇到consistency,istio编译不过,先对这两个模块mvn compile一下就可以了。

修改源码有两点需要注意一下:

代码注释尽量用 java doc格式,也就是不要用 // 。部分模块有编译限制。

新增文件,需要加文件头注释,license说明。可以从其它文件拷贝。否则也会影响编译。

可以从github下载源码和编译好的zip包: Release 初始版本发布 ·
ylforever/nacos-2.3.0-for-postgresql · GitHub

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表