• Nacos2.1.2源码修改支持高斯,postresql


    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.postgresql
        postgresql
        ${postgresql.version}
    
    ···
          
      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    高斯的

    
    ···
    2.0.0
    ···
    
    
    ···
     
     
     ···
    
                    org.opengauss
                    opengauss-jdbc
                    ${opengauss.version}
     
    ···
          
      
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    ② /config/pom.xml
    postgresql的

    
        org.postgresql
        postgresql
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    高斯的

      
                org.opengauss
                opengauss-jdbc
      
    
    • 1
    • 2
    • 3
    • 4

    ③ /naming/pom.xml
    postgresql的

    
        org.postgresql
        postgresql
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    高斯的

            
                org.opengauss
                opengauss-jdbc
            
    
    • 1
    • 2
    • 3
    • 4

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

    public static final String MYSQL = "mysql";
    
    public static final String POSTGRESQL = "postgresql";
    
    
    • 1
    • 2
    • 3
    • 4

    ② PropertyUtil.java#loadSetting

    在这里插入图片描述

    ③ ExternalDataSourceProperties.java

     if (PropertiesConstant.POSTGRESQL.equalsIgnoreCase(
                    EnvUtil.getProperty(PropertiesConstant.SPRING_DATASOURCE_PLATFORM))) {
                driverClassName = JDBC_DRIVER_NAME_POSTGRESQL;
            }
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    在这里插入图片描述

    ④ StartingApplicationListener.java

        private static final String DATABASE_POSTGRESQL = "postgresql";
    
    
    • 1
    • 2

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

    在这里插入图片描述

    5、 兼容PostgreSQL 语句
    ① 主键

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

    在这里插入图片描述

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

    在这里插入图片描述
    ② 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都可使用
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    # 全局替换:
    LIMIT ?, ?    替换为 OFFSET ? LIMIT ?
    LIMIT ?,?     替换为 OFFSET ? LIMIT ?
    LIMIT \\?,\\? 替换为 OFFSET \\? LIMIT \\?
    
    # LIMIT ?,? 是mysql可用,但并非标准sql
    # OFFSET ? LIMIT ? 是sql,因此mysql与postgresql都可使用
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    还有一个较为特殊
    ExternalStoragePaginationHelperImpl#fetchPage

    String selectSql;
    if (isDerby()) {
        selectSql = sqlFetchRows + " OFFSET " + startRow + " ROWS FETCH NEXT " + pageSize + " ROWS ONLY";
    } else if (lastMaxId != null) {
        // PostgreSQL support
        selectSql = sqlFetchRows + " AND id > " + lastMaxId + " ORDER BY id ASC" + " LIMIT " + pageSize + " OFFSET " + 0;
    } else {
        // PostgreSQL support
        selectSql = sqlFetchRows + " LIMIT " + pageSize + " OFFSET " + startRow;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

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

    在这里插入图片描述

    在这里插入图片描述

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

    6、配置文件
    剩下的就是

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

    ① application.properties

    spring.datasource.platform=postgresql
    
    db.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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ② nacos-postgresql.sql

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

    nacos添加PostgreSQL支持

    制作镜像

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

    解决git 中 error 10053 问题

  • 相关阅读:
    Android 13.0 系统settings详情页卸载修改为停止,禁止卸载app功能实现
    一晚上做了一个xpath终结者:xpath-helper-plus
    【数据结构】多叉树转换为二叉树-c++代码实现-POJ 3437 Tree Grafting
    1.triton镜像使用
    安全技术和防火墙
    如何使用AuraDB构建Java微服务
    Word2010入门
    《七月集训》(第一天)——数组
    【热门话题】Stable Diffusion:本地部署教程
    git远程协作
  • 原文地址:https://blog.csdn.net/qiuchenxinlu/article/details/127420490