sql初始化: https://blog.csdn.net/SdWangTy/article/details/109184316
概述
nacos现在除了自身的内嵌数据库外,只支持mysql数据库,由于工作需要,需要将nacos连接到postgresql数据库,查看源码之后发现源码中只兼容了mysql数据库,需要对源码进行修改。刚毕业的小白,有什么错误欢迎大佬指点!!!
修改思路
首先修改配置项,将配置mysql的位置加入判断条件,兼容postgresql;其次修改判断语句,源码中有许多判断是否使用mysql的位置,如没有用mysql且单机模式启动,则会加载内嵌数据库,此处加上postgresql的判断条件;最后,修改nacos中mysql与postgresql在sql语句方面的不同,例如postgresql用``包裹字段会报错,不支持limit m,n的写法。
nacos版本:1.1.4
package com.alibaba.nacos.config.server.service
主要内容位于这个包内,下面按照每个修改的类进行描述
BasicDataSourceServiceImpl
对mysql的加载位于这个类中,由于想要动态判断加载mysql或postgresql驱动,删掉了static代码块,在reload方法中加入了如下代码
if (env.getProperty("spring.datasource.platform").equals("postgresql")) {
JDBC_DRIVER_NAME = DEFAULT_POSTGRESQL_DRIVER;
log.info("Use PostgreSQL as the driver");
}else {
try {
Class.forName(MYSQL_HIGH_LEVEL_DRIVER);
JDBC_DRIVER_NAME = MYSQL_HIGH_LEVEL_DRIVER;
log.info("Use Mysql 8 as the driver");
} catch (ClassNotFoundException ex) {
log.info("Use Mysql as the driver");
JDBC_DRIVER_NAME = DEFAULT_MYSQL_DRIVER;
}
其次下面加入了if else语句,将原本的for循环放到了else中,if中加入判断条件,若是postgresql数据库,复制一份mysql的加载过程,将其中 db. + i 等修改为自己配置文件中的配置即可。
if (JDBC_DRIVER_NAME == DEFAULT_POSTGRESQL_DRIVER) {
String val = null;
BasicDataSource ds = new BasicDataSource();