Nacos 2.5.0 深度适配PostgreSQL全流程
1.依赖配置阶段
- 在项目根目录(nacos-all)的pom.xml中引入PostgreSQL驱动依赖
- 为nacos-config-plugin和nacos-persistence模块添加PostgreSQL相关依赖
2.数据源适配改造
- 修改nacos-datasource-plugin模块下的DataSourceConstant常量类,新增PostgreSQL相关常量
- 在impl目录下新建postgresql包,基于MySQL实现类复制改造:
- 重命名类后缀为Postgresql
- 调整SQL分页语法为PostgreSQL特有的OFFSET ? LIMIT ?格式
- 将where.limit方法改造为where.limitPG
3.持久层配置优化
- 在nacos-datasource-plugin模块下的resource/mapper目录下新增PostgreSQL专属的Mapper文件
com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigInfoBetaMapperByPostgresql com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigInfoMapperByPostgresql com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigInfoTagMapperByPostgresql com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigInfoGrayMapperByPostgresql com.alibaba.nacos.plugin.datasource.impl.postgresql.ConfigTagsRelationMapperByPostgresql com.alibaba.nacos.plugin.datasource.impl.postgresql.HistoryConfigInfoMapperByPostgresql com.alibaba.nacos.plugin.datasource.impl.postgresql.TenantInfoMapperByPostgresql com.alibaba.nacos.plugin.datasource.impl.postgresql.TenantCapacityMapperByPostgresql com.alibaba.nacos.plugin.datasource.impl.postgresql.GroupCapacityMapperByPostgresql
- nacos-persistence模块下修改PersistenceConstant类补充PostgreSQL支持
- nacos-persistence模块下重构ExternalDataSourceProperties类:
- 新增driverName属性及setter方法
- 将静态的JDBC_DRIVER_NAME改为动态获取驱动名称
4.分页处理适配
- 在default-auth-plugin模块中:
- 扩展AuthPageConstant分页常量
- 新增PostgresqlPageHandlerAdapter(基于MySQL适配器改造)
- 在PageHandlerAdapterFactory中注册PostgreSQL处理器
5.打包
mvn clean -Prelease-nacos install -U -DskipTests -Drat.skip=true
打包成功后在distribution下可以找到打包好的文件
- 配置application.properties:
- 替换为实际的PostgreSQL连接信息
- 特别注意schema名称配置
- 调整start.cmd启动脚本参数
spring.datasource.platform=postgresql db.num=1 db.url.0=jdbc:postgresql://localhost:54321/mydb?currentSchema=public&reWriteBatchedInserts=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai db.user.0=user db.password.0=password db.pool.config.driverClassName=org.postgresql.Driver
最后附赠PG建表语句,祝大家都成功!!!
-- 创建 config_info 表 CREATE TABLE config_info ( id BIGSERIAL PRIMARY KEY, data_id VARCHAR(255) NOT NULL, group_id VARCHAR(128), content TEXT NOT NULL, md5 VARCHAR(32), gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, src_user TEXT, src_ip VARCHAR(50), app_name VARCHAR(128), tenant_id VARCHAR(128) DEFAULT '', c_desc VARCHAR(256), c_use VARCHAR(64), effect VARCHAR(64), type VARCHAR(64), c_schema TEXT, encrypted_data_key VARCHAR(1024) NOT NULL DEFAULT '' ); -- 添加唯一约束 ALTER TABLE config_info ADD CONSTRAINT uk_configinfo_datagrouptenant UNIQUE (data_id, group_id, tenant_id); -- 添加表注释 COMMENT ON TABLE config_info IS '配置信息表'; -- 添加列注释 COMMENT ON COLUMN config_info.id IS 'id'; COMMENT ON COLUMN config_info.data_id IS 'data_id'; COMMENT ON COLUMN config_info.group_id IS 'group_id'; COMMENT ON COLUMN config_info.content IS 'content'; COMMENT ON COLUMN config_info.md5 IS 'md5'; COMMENT ON COLUMN config_info.gmt_create IS '创建时间'; COMMENT ON COLUMN config_info.gmt_modified IS '修改时间'; COMMENT ON COLUMN config_info.src_user IS 'source user'; COMMENT ON COLUMN config_info.src_ip IS 'source ip'; COMMENT ON COLUMN config_info.app_name IS 'app_name'; COMMENT ON COLUMN config_info.tenant_id IS '租户字段'; COMMENT ON COLUMN config_info.c_desc IS 'configuration description'; COMMENT ON COLUMN config_info.c_use IS 'configuration usage'; COMMENT ON COLUMN config_info.effect IS '配置生效的描述'; COMMENT ON COLUMN config_info.type IS '配置的类型'; COMMENT ON COLUMN config_info.c_schema IS '配置的模式'; COMMENT ON COLUMN config_info.encrypted_data_key IS '密钥'; -- 创建 config_info_gray 表 CREATE TABLE config_info_gray ( id BIGSERIAL PRIMARY KEY, data_id VARCHAR(255) NOT NULL, group_id VARCHAR(128) NOT NULL, content TEXT NOT NULL, md5 VARCHAR(32), src_user TEXT, src_ip VARCHAR(100), gmt_create TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, app_name VARCHAR(128), tenant_id VARCHAR(128) DEFAULT '', gray_name VARCHAR(128) NOT NULL, gray_rule TEXT NOT NULL, encrypted_data_key VARCHAR(256) NOT NULL DEFAULT '' ); -- 添加唯一约束 ALTER TABLE config_info_gray ADD CONSTRAINT uk_configinfogray_datagrouptenantgray UNIQUE (data_id, group_id, tenant_id, gray_name); -- 添加索引 CREATE INDEX idx_dataid_gmt_modified ON config_info_gray (data_id, gmt_modified); CREATE INDEX idx_gmt_modified ON config_info_gray (gmt_modified); -- 添加表注释 COMMENT ON TABLE config_info_gray IS 'config_info_gray'; -- 添加列注释 COMMENT ON COLUMN config_info_gray.id IS 'id'; COMMENT ON COLUMN config_info_gray.data_id IS 'data_id'; COMMENT ON COLUMN config_info_gray.group_id IS 'group_id'; COMMENT ON COLUMN config_info_gray.content IS 'content'; COMMENT ON COLUMN config_info_gray.md5 IS 'md5'; COMMENT ON COLUMN config_info_gray.src_user IS 'src_user'; COMMENT ON COLUMN config_info_gray.src_ip IS 'src_ip'; COMMENT ON COLUMN config_info_gray.gmt_create IS 'gmt_create'; COMMENT ON COLUMN config_info_gray.gmt_modified IS 'gmt_modified'; COMMENT ON COLUMN config_info_gray.app_name IS 'app_name'; COMMENT ON COLUMN config_info_gray.tenant_id IS 'tenant_id'; COMMENT ON COLUMN config_info_gray.gray_name IS 'gray_name'; COMMENT ON COLUMN config_info_gray.gray_rule IS 'gray_rule'; COMMENT ON COLUMN config_info_gray.encrypted_data_key IS 'encrypted_data_key'; CREATE TABLE config_info_beta ( id BIGSERIAL PRIMARY KEY, data_id VARCHAR(255) NOT NULL, group_id VARCHAR(128) NOT NULL, app_name VARCHAR(128) DEFAULT NULL, content TEXT NOT NULL, beta_ips VARCHAR(1024) DEFAULT NULL, md5 VARCHAR(32) DEFAULT NULL, gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, src_user TEXT, src_ip VARCHAR(50) DEFAULT NULL, tenant_id VARCHAR(128) DEFAULT '', encrypted_data_key VARCHAR(1024) NOT NULL DEFAULT '' ); -- 添加唯一约束 ALTER TABLE config_info_beta ADD CONSTRAINT uk_configinfobeta_datagrouptenant UNIQUE (data_id, group_id, tenant_id); -- 添加表注释 COMMENT ON TABLE config_info_beta IS 'config_info_beta'; -- 添加列注释 COMMENT ON COLUMN config_info_beta.id IS 'id'; COMMENT ON COLUMN config_info_beta.data_id IS 'data_id'; COMMENT ON COLUMN config_info_beta.group_id IS 'group_id'; COMMENT ON COLUMN config_info_beta.app_name IS 'app_name'; COMMENT ON COLUMN config_info_beta.content IS 'content'; COMMENT ON COLUMN config_info_beta.beta_ips IS 'betaIps'; COMMENT ON COLUMN config_info_beta.md5 IS 'md5'; COMMENT ON COLUMN config_info_beta.gmt_create IS '创建时间'; COMMENT ON COLUMN config_info_beta.gmt_modified IS '修改时间'; COMMENT ON COLUMN config_info_beta.src_user IS 'source user'; COMMENT ON COLUMN config_info_beta.src_ip IS 'source ip'; COMMENT ON COLUMN config_info_beta.tenant_id IS '租户字段'; COMMENT ON COLUMN config_info_beta.encrypted_data_key IS '密钥'; -- 创建表结构 CREATE TABLE config_info_tag ( id BIGSERIAL PRIMARY KEY, data_id VARCHAR(255) NOT NULL, group_id VARCHAR(128) NOT NULL, tenant_id VARCHAR(128) DEFAULT '', tag_id VARCHAR(128) NOT NULL, app_name VARCHAR(128), content TEXT NOT NULL, md5 VARCHAR(32), gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, src_user TEXT, src_ip VARCHAR(50) ); -- 添加唯一约束 ALTER TABLE config_info_tag ADD CONSTRAINT uk_configinfotag_datagrouptenanttag UNIQUE (data_id, group_id, tenant_id, tag_id); -- 表注释 COMMENT ON TABLE config_info_tag IS 'config_info_tag'; -- 列注释 COMMENT ON COLUMN config_info_tag.id IS 'id'; COMMENT ON COLUMN config_info_tag.data_id IS 'data_id'; COMMENT ON COLUMN config_info_tag.group_id IS 'group_id'; COMMENT ON COLUMN config_info_tag.tenant_id IS 'tenant_id'; COMMENT ON COLUMN config_info_tag.tag_id IS 'tag_id'; COMMENT ON COLUMN config_info_tag.app_name IS 'app_name'; COMMENT ON COLUMN config_info_tag.content IS 'content'; COMMENT ON COLUMN config_info_tag.md5 IS 'md5'; COMMENT ON COLUMN config_info_tag.gmt_create IS '创建时间'; COMMENT ON COLUMN config_info_tag.gmt_modified IS '修改时间'; COMMENT ON COLUMN config_info_tag.src_user IS 'source user'; COMMENT ON COLUMN config_info_tag.src_ip IS 'source ip'; -- 创建表结构 CREATE TABLE config_tags_relation ( id BIGINT NOT NULL, tag_name VARCHAR(128) NOT NULL, tag_type VARCHAR(64), data_id VARCHAR(255) NOT NULL, group_id VARCHAR(128) NOT NULL, tenant_id VARCHAR(128) DEFAULT '', nid BIGSERIAL ); -- 设置主键 ALTER TABLE config_tags_relation ADD PRIMARY KEY (nid); -- 添加唯一约束 ALTER TABLE config_tags_relation ADD CONSTRAINT uk_configtagrelation_configidtag UNIQUE (id, tag_name, tag_type); -- 添加索引 CREATE INDEX idx_tenant_id ON config_tags_relation (tenant_id); -- 表注释 COMMENT ON TABLE config_tags_relation IS 'config_tag_relation'; -- 列注释 COMMENT ON COLUMN config_tags_relation.id IS 'id'; COMMENT ON COLUMN config_tags_relation.tag_name IS 'tag_name'; COMMENT ON COLUMN config_tags_relation.tag_type IS 'tag_type'; COMMENT ON COLUMN config_tags_relation.data_id IS 'data_id'; COMMENT ON COLUMN config_tags_relation.group_id IS 'group_id'; COMMENT ON COLUMN config_tags_relation.tenant_id IS 'tenant_id'; COMMENT ON COLUMN config_tags_relation.nid IS 'nid, 自增长标识'; -- 创建表结构 CREATE TABLE group_capacity ( id BIGSERIAL PRIMARY KEY, group_id VARCHAR(128) NOT NULL DEFAULT '', quota INTEGER NOT NULL DEFAULT 0, usage INTEGER NOT NULL DEFAULT 0, max_size INTEGER NOT NULL DEFAULT 0, max_aggr_count INTEGER NOT NULL DEFAULT 0, max_aggr_size INTEGER NOT NULL DEFAULT 0, max_history_count INTEGER NOT NULL DEFAULT 0, gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); -- 添加唯一约束 ALTER TABLE group_capacity ADD CONSTRAINT uk_group_id UNIQUE (group_id); -- 表注释 COMMENT ON TABLE group_capacity IS '集群、各Group容量信息表'; -- 列注释 COMMENT ON COLUMN group_capacity.id IS '主键ID'; COMMENT ON COLUMN group_capacity.group_id IS 'Group ID,空字符表示整个集群'; COMMENT ON COLUMN group_capacity.quota IS '配额,0表示使用默认值'; COMMENT ON COLUMN group_capacity.usage IS '使用量'; COMMENT ON COLUMN group_capacity.max_size IS '单个配置大小上限,单位为字节,0表示使用默认值'; COMMENT ON COLUMN group_capacity.max_aggr_count IS '聚合子配置最大个数,0表示使用默认值'; COMMENT ON COLUMN group_capacity.max_aggr_size IS '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值'; COMMENT ON COLUMN group_capacity.max_history_count IS '最大变更历史数量'; COMMENT ON COLUMN group_capacity.gmt_create IS '创建时间'; COMMENT ON COLUMN group_capacity.gmt_modified IS '修改时间'; -- 创建表结构 CREATE TABLE his_config_info ( id BIGINT NOT NULL, nid BIGSERIAL, data_id VARCHAR(255) NOT NULL, group_id VARCHAR(128) NOT NULL, app_name VARCHAR(128), content TEXT NOT NULL, md5 VARCHAR(32), gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, src_user TEXT, src_ip VARCHAR(50), op_type CHAR(10), tenant_id VARCHAR(128) DEFAULT '', encrypted_data_key VARCHAR(1024) NOT NULL DEFAULT '', publish_type VARCHAR(50) DEFAULT 'formal', gray_name VARCHAR(50), ext_info TEXT ); -- 设置主键 ALTER TABLE his_config_info ADD PRIMARY KEY (nid); -- 创建索引 CREATE INDEX idx_gmt_create ON his_config_info (gmt_create); CREATE INDEX his_config_info_idx_gmt_modified ON his_config_info (gmt_modified); CREATE INDEX idx_did ON his_config_info (data_id); -- 表注释 COMMENT ON TABLE his_config_info IS '多租户改造'; -- 列注释 COMMENT ON COLUMN his_config_info.id IS 'id'; COMMENT ON COLUMN his_config_info.nid IS 'nid, 自增标识'; COMMENT ON COLUMN his_config_info.data_id IS 'data_id'; COMMENT ON COLUMN his_config_info.group_id IS 'group_id'; COMMENT ON COLUMN his_config_info.app_name IS 'app_name'; COMMENT ON COLUMN his_config_info.content IS 'content'; COMMENT ON COLUMN his_config_info.md5 IS 'md5'; COMMENT ON COLUMN his_config_info.gmt_create IS '创建时间'; COMMENT ON COLUMN his_config_info.gmt_modified IS '修改时间'; COMMENT ON COLUMN his_config_info.src_user IS 'source user'; COMMENT ON COLUMN his_config_info.src_ip IS 'source ip'; COMMENT ON COLUMN his_config_info.op_type IS 'operation type'; COMMENT ON COLUMN his_config_info.tenant_id IS '租户字段'; COMMENT ON COLUMN his_config_info.encrypted_data_key IS '密钥'; COMMENT ON COLUMN his_config_info.publish_type IS 'publish type gray or formal'; COMMENT ON COLUMN his_config_info.gray_name IS 'gray name'; COMMENT ON COLUMN his_config_info.ext_info IS 'ext info'; -- 创建表结构 CREATE TABLE tenant_capacity ( id BIGSERIAL PRIMARY KEY, tenant_id VARCHAR(128) NOT NULL DEFAULT '', quota INTEGER NOT NULL DEFAULT 0, usage INTEGER NOT NULL DEFAULT 0, max_size INTEGER NOT NULL DEFAULT 0, max_aggr_count INTEGER NOT NULL DEFAULT 0, max_aggr_size INTEGER NOT NULL DEFAULT 0, max_history_count INTEGER NOT NULL DEFAULT 0, gmt_create TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, gmt_modified TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); -- 添加唯一约束 ALTER TABLE tenant_capacity ADD CONSTRAINT uk_tenant_id UNIQUE (tenant_id); -- 表注释 COMMENT ON TABLE tenant_capacity IS '租户容量信息表'; -- 列注释 COMMENT ON COLUMN tenant_capacity.id IS '主键ID'; COMMENT ON COLUMN tenant_capacity.tenant_id IS 'Tenant ID'; COMMENT ON COLUMN tenant_capacity.quota IS '配额,0表示使用默认值'; COMMENT ON COLUMN tenant_capacity.usage IS '使用量'; COMMENT ON COLUMN tenant_capacity.max_size IS '单个配置大小上限,单位为字节,0表示使用默认值'; COMMENT ON COLUMN tenant_capacity.max_aggr_count IS '聚合子配置最大个数'; COMMENT ON COLUMN tenant_capacity.max_aggr_size IS '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值'; COMMENT ON COLUMN tenant_capacity.max_history_count IS '最大变更历史数量'; COMMENT ON COLUMN tenant_capacity.gmt_create IS '创建时间'; COMMENT ON COLUMN tenant_capacity.gmt_modified IS '修改时间'; -- 创建表结构 CREATE TABLE tenant_info ( id BIGSERIAL PRIMARY KEY, kp VARCHAR(128) NOT NULL, tenant_id VARCHAR(128) DEFAULT '', tenant_name VARCHAR(128) DEFAULT '', tenant_desc VARCHAR(256), create_source VARCHAR(32), gmt_create BIGINT NOT NULL, gmt_modified BIGINT NOT NULL ); -- 添加唯一约束 ALTER TABLE tenant_info ADD CONSTRAINT uk_tenant_info_kptenantid UNIQUE (kp, tenant_id); -- 添加索引 CREATE INDEX tenant_info_idx_tenant_id ON tenant_info (tenant_id); -- 表注释 COMMENT ON TABLE tenant_info IS 'tenant_info'; -- 列注释 COMMENT ON COLUMN tenant_info.id IS 'id'; COMMENT ON COLUMN tenant_info.kp IS 'kp'; COMMENT ON COLUMN tenant_info.tenant_id IS 'tenant_id'; COMMENT ON COLUMN tenant_info.tenant_name IS 'tenant_name'; COMMENT ON COLUMN tenant_info.tenant_desc IS 'tenant_desc'; COMMENT ON COLUMN tenant_info.create_source IS 'create_source'; COMMENT ON COLUMN tenant_info.gmt_create IS '创建时间'; COMMENT ON COLUMN tenant_info.gmt_modified IS '修改时间'; -- 创建表结构 CREATE TABLE users ( username VARCHAR(50) NOT NULL, password VARCHAR(500) NOT NULL, enabled BOOLEAN NOT NULL, PRIMARY KEY (username) ); -- 添加注释 COMMENT ON TABLE users IS '用户表'; COMMENT ON COLUMN users.username IS 'username'; COMMENT ON COLUMN users.password IS 'password'; COMMENT ON COLUMN users.enabled IS 'enabled'; -- 创建表结构 CREATE TABLE roles ( username VARCHAR(50) NOT NULL, role VARCHAR(50) NOT NULL ); -- 添加唯一索引 CREATE UNIQUE INDEX idx_user_role ON roles (username, role); -- 添加列注释 COMMENT ON COLUMN roles.username IS 'username'; COMMENT ON COLUMN roles.role IS 'role'; -- 创建表结构 CREATE TABLE permissions ( role VARCHAR(50) NOT NULL, resource VARCHAR(128) NOT NULL, action VARCHAR(8) NOT NULL ); -- 添加唯一约束 ALTER TABLE permissions ADD CONSTRAINT uk_role_permission UNIQUE (role, resource, action); -- 添加列注释 COMMENT ON COLUMN permissions.role IS 'role'; COMMENT ON COLUMN permissions.resource IS 'resource'; COMMENT ON COLUMN permissions.action IS 'action';
- 配置application.properties:
- 在default-auth-plugin模块中:
- nacos-persistence模块下修改PersistenceConstant类补充PostgreSQL支持
- 在nacos-datasource-plugin模块下的resource/mapper目录下新增PostgreSQL专属的Mapper文件
- 在impl目录下新建postgresql包,基于MySQL实现类复制改造:
- 修改nacos-datasource-plugin模块下的DataSourceConstant常量类,新增PostgreSQL相关常量
- 为nacos-config-plugin和nacos-persistence模块添加PostgreSQL相关依赖
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。