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

news2024/9/22 17:19:05

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的

<properties>
···
<postgresql.version>42.3.3</postgresql.version>
···
</properties>

···
 <dependencyManagement>
 <dependencies>
 ···
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <version>${postgresql.version}</version>
</dependency>
···
      </dependencies>
  </dependencyManagement>

高斯的

<properties>
···
<opengauss.version>2.0.0</opengauss.version>
···
</properties>

···
 <dependencyManagement>
 <dependencies>
 ···
<dependency>
                <groupId>org.opengauss</groupId>
                <artifactId>opengauss-jdbc</artifactId>
                <version>${opengauss.version}</version>
 </dependency>
···
      </dependencies>
  </dependencyManagement>

② /config/pom.xml
postgresql的

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
</dependency>

高斯的

  <dependency>
            <groupId>org.opengauss</groupId>
            <artifactId>opengauss-jdbc</artifactId>
  </dependency>

③ /naming/pom.xml
postgresql的

<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
</dependency>

高斯的

        <dependency>
            <groupId>org.opengauss</groupId>
            <artifactId>opengauss-jdbc</artifactId>
        </dependency>

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 support
    selectSql = sqlFetchRows + " AND id > " + lastMaxId + " ORDER BY id ASC" + " LIMIT " + pageSize + " OFFSET " + 0;
} else {
    // PostgreSQL support
    selectSql = sqlFetchRows + " LIMIT " + pageSize + " OFFSET " + startRow;
}

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

在这里插入图片描述

在这里插入图片描述

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

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

② nacos-postgresql.sql

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

nacos添加PostgreSQL支持

制作镜像

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

解决git 中 error 10053 问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/61283.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

盒子模型详解

菜鸟教程解释&#xff1a;所有HTML元素可以看作盒子 1.普通盒子模型&#xff1a; margin&#xff08;外边距&#xff09;&#xff1a;清除边框外的区域&#xff0c;外边距是透明的&#xff0c;不包含在background属性中。 border&#xff08;边框&#xff09;&#xff1a; 围绕…

JUC并发编程与源码分析笔记06-Java内存模型之JMM

计算机硬件存储体系 CPU的运行并不是直接操作内存而是先把内存里边的数据读到缓存&#xff0c;而内存的读和写操作的时候就会造成不一致的问题。 JVM规范中试图定义一种Java内存模型&#xff08;Java Memory Model&#xff0c;简称JMM&#xff09;来屏蔽掉各种硬件和操作系统的…

电平触发的触发器

普通的SR锁存器没有任何抗干扰能力 我们要加控制信号&#xff0c;来抵抗干扰 比如说我们不把信号直接加在门上&#xff0c;我们可以再加一级门电路&#xff0c;让这个输出和输入不在同一个门上&#xff0c;我们希望加入一个控制信号&#xff0c;来控制电路工作的时刻 对电路结…

神经网络——反向传播算法

一、多元分类 之前讨论的神经网络都是以二元分类为目的进行介绍的。 当我们有不止两种分类时&#xff08;也就是y1,2,3….y1,2,3….y1,2,3….&#xff09;&#xff0c;比如以下这种情况&#xff0c;该怎么办&#xff1f;如果我们要训练一个神经网络算法来识别路人、汽车、摩托…

mysql的主从复制与读写分离

目录 一. MySQL 主从复制原理 1.1 MySQL 支持的复制类型 1.2 MySQL主从复制的工作过程 二、主从复制实验部署 2.1、实验环境 2.2、mysql主从服务器时间同步 主服务器&#xff08;192.168.80.11&#xff09; 从服务器&#xff08;192.168.80.12/13&#xff09; 2.3、主…

[附源码]计算机毕业设计网上鲜花购物系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【机器学习】支持向量回归

有任何的书写错误、排版错误、概念错误等&#xff0c;希望大家包含指正。 在阅读本篇之前建议先学习&#xff1a; 【机器学习】支持向量机【上】硬间隔 【机器学习】支持向量机【下】软间隔与核函数 支持向量回归 支持向量回归&#xff08;support vector regression&#xf…

[附源码]计算机毕业设计基于SpringBoot的党务管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

《人类简史》笔记三—— 历史从无正义

目录 一、尽管把人人生而平等喊得震天响&#xff0c;其实还是把人分成了上下等级 二、恶性循环 三、当男人究竟有什么好的&#xff1f; 一、尽管把人人生而平等喊得震天响&#xff0c;其实还是把人分成了上下等级 古时候&#xff1a; 上等人 平民和奴隶 现在&#xff1a;…

网络结构模式,协议,端口,网络模型,arp

网络结构模式&#xff08;软件结构&#xff09; C/S结构 服务器 - 客户机&#xff0c;即 Client - Server&#xff08;C/S&#xff09;结构 C/S 结构通常采取两层结构: 服务器负责数据的管理客户机负责完成与用户的交互任务 在C/S结构中&#xff0c;应用程序分为两部分: 服务…

koa 和 express 的对比

前言 天冷了&#xff0c;唯有学习来温暖自己。 最近利用业余的时间&#xff0c;跟着 coderwhy 老师学习 node.js&#xff0c;了解以及掌握一些服务端的常见知识&#xff1a; fileSystem&#xff1a;文件读取模块。events&#xff1a;事件流Buffer&#xff1a;node 中处理二进…

高仿英雄联盟游戏网页制作作业 英雄联盟LOL游戏HTML网页设计模板 简单学生网页设计 静态HTML CSS网站制作成品

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

Java—代理

文章目录先举一个例子&#xff1a;开闭原则什么是代理两种调用的方式&#xff1a;代理定义&#xff1a;代理的实现方式静态代理代理的目的&#xff1a;如何让程序知道要增强的功能是谁&#xff1f;静态代理缺点&#xff1a;动态代理什么是动态代理动态代理的实现静态代理和动态…

26. SAP ABAP OData Gateway 框架里 /IWFND, /IWBEP 这些缩写代表了什么含义?

文章目录 GWFNDBEP本文参考链接本教程前一篇文章 - 25. 答疑 - SAP OData 框架处理 Metadata 元数据请求的实现细节,前后端组件部署在同一台物理服务器,我们深入了 SAP ABAP OData 框架来学习其元数据请求的执行明细。 我们在文章里看到了不少以 /IWFND/, /IWBEP 这些命名空…

MAUI Blazor (Windows) App 动态设置窗口标题

原文链接 https://www.cnblogs.com/densen2014/p/16950996.html 接着上一篇"如何为面向 Windows 的 MAUI Blazor 应用程序设置窗口标题&#xff1f;" Tips: 总所周知,MAUI 除了 Windows App 其他平台窗口是没有 Title 这回事的. 在 Blazor 里面可以直接给页面打上…

时间轴-新年倒计时(实操java)

文章目录一、前言二、前端代码实现1、效果图年月日倒计时秒杀1天倒计时秒杀60秒倒计时2、代码实操&#xff08;微信小程序前端&#xff09;①在utils文件夹下新建js文件&#xff1a;getperiod.js工具类②引入js&#xff0c;在页面index.js开头引入③完整代码3、倒计时实现①1天…

学习python第一天(数据类型)

关于Python的数据类型 Python数据类型包括&#xff1a; 数字类型&#xff0c;字符类型&#xff0c;布尔类型&#xff0c;空类型&#xff0c;列表类型&#xff0c;元组类型&#xff0c;字典类型 1、数字类型 包括&#xff1a;整型int 浮点型float(有小数位的都是是浮点型) 注…

自己写Spring组件-01手写Bean注册器

简介 在进行web开发的时候&#xff0c;我们经常使用Component、Services、Controller等注解去声明Bean&#xff0c;然后Spring就会帮我们注册。 如果我们想要自己写一个组件&#xff08;方便后期使用&#xff09;&#xff0c;进行无感引入的时候&#xff0c;就需要自己去注册B…

【计算机网络】计算机网络复习总结 ----- 链路层

计算机网络 内容管理数据链路层 Data Link Layer相关概念术语link 链路data link 数据链路帧 frameMTU maximum transfer Unit 最大传送单元PPP point to point Protcol 点对点协议MAC 地址 media access control网桥 bridge交换机 switch成帧 规则成帧定界字符计数法字符填充分…

QT:文件介绍

UI&#xff1a;QT程序中使用的ui界面就保存在该文件中 组件 设置当前组件的属性 点谁显示谁的属性 调整最终页面的布局&#xff0c;使组件控件在水平或对齐 调整因页面放大缩小时&#xff0c;控件与控件之间的水平和垂直间距 各种各样的按钮 图像显示有关的视图 列表框 各…