🧑 博主简介:CSDN博客专家 ,历代文学网 (PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索"历代文学 ")总架构师,
15年
工作经验,精通Java编程
,高并发设计
,Springboot和微服务
,熟悉Linux
,ESXI虚拟化
以及云原生Docker和K8s
,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作 请加本人wx(注明来自csdn ):foreast_sea


Nacos-3.0.3 适配PostgreSQL数据库

引言
本文重点介绍基于Nacos-3.0.3
最新版本如何用PostgreSQL
数据库来存储,也就是如何打造或直接获取能适配Nacos-3.0.3
的PostgreSQL
数据库插件。
Nacos-3.0.3
版本最直接最快集成PostgreSQL
数据源的方法就是引入依赖,这也是本文重点,也就是核心部分,我把它放这里:
xml
<dependency>
<groupId>com.sinhy</groupId>
<artifactId>nacos-postgresql-datasource-plugin-ext</artifactId>
<version>3.0.3</version>
</dependency>
我已将pg数据源插件打成了jar包,传到maven中央仓库,大家只需下载该jar,然后放入nacos
的home
目录下的plugins
插件目录,再配置pg
数据源信息,即可使用!
一、PostgreSQL
数据库源码地址
为了方便后续及时更新Nacos每个版本对应的PostgreSQL
数据库插件,我们特意基于官方提供的Nacos插件工程进行了二开,然后打算后续自己维护这部分功能,因此给大家分享:
Nacos-3.0.3
的PostgreSQL
数据库插件源码地址
https://github.com/lilinhai/nacos-datasource-plugin-ext
注意:目前该工程中,只有PostgreSQL插件可以正常使用,其余数据库暂未做相关深入适配和测试!
二、灰度配置适配
增加了一个抽象类,用于适配其他数据库多灰度配置表的支持:
java
public abstract class BaseConfigInfoGrayMapper extends AbstractDataSourceMapper implements ConfigInfoGrayMapper
{
/**
* <pre>构造方法</pre>
* @since 2025-04-27 10:03
* @param databaseDialect
*/
protected BaseConfigInfoGrayMapper(DatabaseDialect databaseDialect)
{
super(databaseDialect);
}
@Override
public String getTableName()
{
return TableConstant.CONFIG_INFO_GRAY;
}
@Override
public MapperResult findAllConfigInfoGrayForDumpAllFetchRows(MapperContext context)
{
String sql = " SELECT id,data_id,group_id,tenant_id,gray_name,gray_rule,app_name,content,md5,gmt_modified " + " FROM config_info_gray ORDER BY id ";
sql = databaseDialect.getLimitPageSqlWithOffset(sql, context.getStartRow(), context.getPageSize());
return new MapperResult(sql, Collections.emptyList());
}
}
三、源码打包构建
源码下载本地后,也可以手动打包构建,输出pg插件,如下图:
执行maven构建命令:
sh
clean package
将输出jar到target目录下:
将jar拷贝到nacos的plugins目录下即可
四、nacos3.0 基于pg启动
启动需要输入安全密钥:
输入后回车、即可访问
8080
(管理端口)端口:
五、插件概述
5.1、简介
从Nacos2.2版本开始,Nacos提供了数据源扩展插件,以便让需要进行其他数据库适配的用户自己编写插件来保存数据。当前项目插件目前已简单适配Postgresql。
当前插件项目地址:
https://github.com/lilinhai/nacos-datasource-plugin-ext
当前项目是基于Nacos3.0.1
版本的扩展插件口进行开发,同时也是基于以下项目的一个分支进行的而开:
https://github.com/nacos-group/nacos-plugin/tree/develop/nacos-datasource-plugin-ext
很感谢阿里nacos
团队的贡献,你们一如既往的迭代nacos
版本,给你们说声辛苦了,但是却忘记了nacos
的其他数据源适配,比如postgresql
。
5.2、插件工程结构说明
nacos-datasource-plugin-ext-base
工程为数据库插件操作的适配抽象定义。
nacos-postgresql-datasource-plugin-ext
工程可打包适配Postgresql
的数据库插件
六、下载和使用
6.1、插件引入
方式一:将nacos
的postgresql
插件下载下来,将依赖手动拷贝到nacos
的home
目录下的plugins
目录下(nacos-3.0.1/plugins
)即可。
- 以下
nacos
的postgresql
插件版本仅支持nacos3.0.1
,采用jdk17
编译级:
xml
<dependency>
<groupId>com.sinhy</groupId>
<artifactId>nacos-postgresql-datasource-plugin-ext</artifactId>
<version>3.0.2</version>
</dependency>
方式二:下载当前插件项目源码,打包为jar包,将该文件的路径配置到startup.sh
文件中,使用Nacos
的loader.path
机制指定该插件的路径,可修改startup.sh
中的loader.path
参数的位置进行指定。
6.2、修改数据库配置文件
在application.properties
文件中声明postgresql
的配置信息:
java
spring.sql.init.platform=postgresql
#spring.datasource.platform=postgresql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:postgresql://127.0.0.1:5432/nacos?currentSchema=public&useUnicode=true&tcpKeepAlive=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&reWriteBatchedInserts=true&ApplicationName=nacos_java
db.user.0=nacos
db.password.0=nacos
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
db.pool.config.driverClassName=org.postgresql.Driver
# 如果是 oracle 则需要改为 SELECT * FROM dual
# db.pool.config.connectionTestQuery=SELECT 1
6.3、导入Postgresql的数据库脚本文件
导入nacos-postgresql
的脚本文件,脚本文件在nacos-postgresql-datasource-plugin-ext/src/main/resources/schema
文件夹下面.
上面操作完成后,启动Nacos
即可。
七、其他数据库插件开发
可参考nacos-postgresql-datasource-plugin-ext
工程,新创建Maven项目,实现AbstractDatabaseDialect
类,重写相关的分页操作逻辑与方法,并创建相应的mapper实现。
八、参考资料
https://github.com/nacos-group/nacos-plugin/tree/develop/nacos-datasource-plugin-ext