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

一、背景说明

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下载代码:https://github.com/alibaba/nacos/releases/tag/2.3.0

在这里插入图片描述

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项目中取数据库参数化脚本,执行脚本新建表。
    初始化脚本所在位置:https://github.com/nacos-group/nacos-plugin/tree/develop/nacos-datasource-plugin-ext/nacos-postgresql-datasource-plugin-ext/src/main/resources/schema

三、修改代码适配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、用户名、密码
    在这里插入图片描述
  3. 进入nacos\bin目录,使用单机模式启动
    在这里插入图片描述
  4. 在浏览器中输入 http://localhost:8848/nacos 可以打开nacos操作。

五、本地调试nacos

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

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

  1. 代码注释尽量用 java doc格式,也就是不要用 // 。部分模块有编译限制。
  2. 新增文件,需要加文件头注释,license说明。可以从其它文件拷贝。否则也会影响编译。

可以从github下载源码和编译好的zip包: https://github.com/ylforever/nacos-2.3.0-for-postgresql/releases/tag/2025-04-03

END

查看更多技术文章,请关注微信公众号:Neo Yong

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值