网站首页 > 博客文章 正文
一、背景说明
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数据库
- 用navicat或者pgadmin连上postgresql,新建一个nacos数据库。
- 从nacos-plugin项目中取数据库参数化脚本,执行脚本新建表。
三、修改代码适配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
四、打包部署
- 采用步骤二中描述的mvn命令打包,解压nacos-server-2.3.0.zip后得到一个nacos文件夹。
- 修改配置文件nacos/conf/application.properties中的数据库IP、用户名、密码.
- 进入nacos\bin目录,使用单机模式启动
- 在浏览器中输入 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
- 上一篇: IDEA开发工具中导出项目的目录结构树
- 下一篇: 为什么越来越多的人选择使用idea软件
猜你喜欢
- 2025-05-02 spring Boot必用依赖框架(spring boot 依赖)
- 2025-05-02 Navigating global shifts and forging a path for emerging economies
- 2025-05-02 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 2025-05-02 Terminal affliction - China’s vanishing coach stations
- 2025-05-02 连载嵌入式Linux开发教程:初始Ubuntu
- 2025-05-02 Win10预览版9879硬盘丢失的Linux解决方案
- 2025-05-02 idea插件之Grep Console(工欲善其事,必先利其器)
- 2025-05-02 mybatis-plus保姆级入门教程,手把手教你轻松实现增删改查
- 2025-05-02 java日常开发笔记和开发问题记录(java开发问题总结)
- 2025-05-02 IDEA界面太丑??尝试一下这几个插件
你 发表评论:
欢迎- 368℃用AI Agent治理微服务的复杂性问题|QCon
- 367℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 359℃初次使用IntelliJ IDEA新建Maven项目
- 352℃Maven技术方案最全手册(mavena)
- 348℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 347℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 345℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 343℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)