Nacos2.1.2源码修改支持高斯,postresql
创始人
2024-03-17 21:47:09

1、下载代码
git clone https://github.com/alibaba/nacos.git -b 2.1.2

git clone https://github.com/alibaba/nacos.git

2、maven命令执行下试试能不能打包
mvn -Prelease-nacos -Dmaven.test.skip=true -Drat.skip=true clean install -U

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

如果com.alibaba.nacos.consistency.ProtoMessageUtil编译报错,或提示com.google.protobuf:protoc不存在之类的,手动下载protoc-3.16.3-win64.zip文件,把protoc.exe改成截图名字,放到maven路径中
下载路径:
https://github.com/protocolbuffers/protobuf/releases(如果不对可以百度下,白天不稳定,晚上还行)
在这里插入图片描述
打包的结果在distribution中

3、添加驱动jar包
打包完成后,试试能不能启动,程序能不能注册,然后开始改代码支持高斯或postresql,本文以高斯为例

① /pom.xml
postgresql的


···
42.3.3
···
······
org.postgresqlpostgresql${postgresql.version}

···

高斯的


···
2.0.0
···
······
org.opengaussopengauss-jdbc${opengauss.version}
···

② /config/pom.xml
postgresql的

org.postgresqlpostgresql

高斯的

  org.opengaussopengauss-jdbc

③ /naming/pom.xml
postgresql的

org.postgresqlpostgresql

高斯的

        org.opengaussopengauss-jdbc

4、 添加PostgreSQL驱动代码
高斯的驱动代码和PostgreSQL是一模一样的,这里只写postgresql的
① PropertiesConstant.java

public static final String MYSQL = "mysql";public static final String POSTGRESQL = "postgresql";

② PropertyUtil.java#loadSetting

在这里插入图片描述

③ ExternalDataSourceProperties.java

 if (PropertiesConstant.POSTGRESQL.equalsIgnoreCase(EnvUtil.getProperty(PropertiesConstant.SPRING_DATASOURCE_PLATFORM))) {driverClassName = JDBC_DRIVER_NAME_POSTGRESQL;}

在这里插入图片描述

在这里插入图片描述

④ StartingApplicationListener.java

    private static final String DATABASE_POSTGRESQL = "postgresql";

在这里插入图片描述
以下为#judgeStorageMode方法内

在这里插入图片描述

5、 兼容PostgreSQL 语句
① 主键

# 全局替换:
Statement.RETURN_GENERATED_KEYS 替换为 new String[]{"id"}# 由于postgresql无法通过Statement.RETURN_GENERATED_KEYS获取主键,因此只能显示的指定要寻找的主键

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
② LIKE

当前2.1.2版本只有两个地方,都在/plugin-default-impl/src/main/java/com/alibaba/nacos/plugin/auth/impl/persistence下
① ExternalRolePersistServiceImpl#findRolesLikeRoleName
② ExternalUserPersistServiceImpl#findUserLikeUsername

在这里插入图片描述

#如上图类似替换
LIKE '%' ? '%' 替换成 LIKE ?
new String[] {username} 替换成 new String[] {String.format("%%%s%%", username)}# LIKE '%' '%AD' '%'的方式,mysql可用,但并非标准sql
# LIKE '%%AD%'的方式,这是标准sql,因此mysql与postgresql都可使用

在这里插入图片描述
在这里插入图片描述
③ LIMIT

# 全局替换:
LIMIT ?, ?    替换为 OFFSET ? LIMIT ?
LIMIT ?,?     替换为 OFFSET ? LIMIT ?
LIMIT \\?,\\? 替换为 OFFSET \\? LIMIT \\?# LIMIT ?,? 是mysql可用,但并非标准sql
# OFFSET ? LIMIT ? 是sql,因此mysql与postgresql都可使用

还有一个较为特殊
ExternalStoragePaginationHelperImpl#fetchPage

String selectSql;
if (isDerby()) {selectSql = sqlFetchRows + " OFFSET " + startRow + " ROWS FETCH NEXT " + pageSize + " ROWS ONLY";
} else if (lastMaxId != null) {// PostgreSQL supportselectSql = sqlFetchRows + " AND id > " + lastMaxId + " ORDER BY id ASC" + " LIMIT " + pageSize + " OFFSET " + 0;
} else {// PostgreSQL supportselectSql = sqlFetchRows + " LIMIT " + pageSize + " OFFSET " + startRow;
}

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

6、配置文件
剩下的就是

application.properties
nacos-postgresql.sql
的问题了

① application.properties

spring.datasource.platform=postgresqldb.url.0=jdbc:postgresql://127.0.0.1:5432/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=postgres
db.password.0=nacos

② nacos-postgresql.sql

参考文档:
nacos如何以集群模式启动

nacos添加PostgreSQL支持

制作镜像

Unknown lifecycle phase “.test.skip=true“. You must specify a valid lifecycl

解决git 中 error 10053 问题

上一篇:一 H5游戏的种类

下一篇:_001_Zotero入门

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...