这里通过修改Nacos源码的方式来实现这个需求,选择的Nacos版本是2.1.1。

1.添加神通数据库相关依赖

由于有些数据库的依赖,在公共仓库不存在,此时我们要么选择将包引入用私库,要么选择打包时候加入外部依赖包,我选择的是第二种。

在以下两个模块的resources文件夹下,新建lib包,加入神通数据库依赖包,如下:

nacos 默认数据存储 不使用mysql nacos使用内置数据库_加载

nacos 默认数据存储 不使用mysql nacos使用内置数据库_nacos_02


修改以上两个模块的pom文件,引入神通数据库依赖,如下:

<dependency>
  <groupId>com.oscar</groupId>
  <artifactId>oscarJDBC16</artifactId>
  <!--system,类似provided,需要显式提供依赖的jar以后,Maven就不会在Repository中查找它-->
  <scope>system</scope>
  <systemPath>${project.basedir}/src/main/resources/lib/oscarJDBC16.jar</systemPath>
  <version>1.0.0</version>
</dependency>

nacos 默认数据存储 不使用mysql nacos使用内置数据库_加载_03

2.修改相关类

2.1 修改com.alibaba.nacos.config.server.service.datasource.ExternalDataSourceProperties类

2.1.1 添加jdbcDriverName属性

nacos 默认数据存储 不使用mysql nacos使用内置数据库_配置文件_04


这个属性其实就是用来自定义我们要设置的驱动,不然原来默认只有一个JDBC_DRIVER_NAME的mysql驱动。

2.1.2 设置jdbcDriverName属性

修改如下代码,添加判断和日志,在我们设置的jdbcDriverName属性不为空时,就将驱动设置为我们定义的驱动,如果为空,就默认用mysql驱动,如下:

nacos 默认数据存储 不使用mysql nacos使用内置数据库_数据源_05

2.2 修改com.alibaba.nacos.config.server.constant.PropertiesConstant类

2.2.1 添加神通的常量标识

nacos 默认数据存储 不使用mysql nacos使用内置数据库_java_06


后续这个配置就是用来匹配配置文件中的数据源属性,当设置为st时,代码就能判断知道此时nacos要加载的是外部数据源了。

2.2.2 修改com.alibaba.nacos.config.server.utils.PropertyUtil类

修改PropertyUtil#loadSetting()方法,添加设置加载st数据源配置的逻辑,如下:

nacos 默认数据存储 不使用mysql nacos使用内置数据库_加载_07


这代码加上去,就可以实现,当在配置文件中配置数据源为st,nacos能够识别到这是外部数据源,通过判断,开始加载我们自定义的一些外部数据源配置。

2.2.3 修改com.alibaba.nacos.core.listener.judgeStorageMode类

添加一个支持的数据源列表集合常量,不然原来默认只匹配mysql,如下:

nacos 默认数据存储 不使用mysql nacos使用内置数据库_加载_08


修改judgeStorageMode()方法,注释掉原有逻辑,添加新的判断逻辑,如下:

nacos 默认数据存储 不使用mysql nacos使用内置数据库_nacos_09


通过如上修改,在nacos启动时,才能成功打印出是否加载外部数据源的日志提示。

3.修改配置文件

这里修改配置文件,就是为了配置上神通数据源一些参数,修改以下两个模块的application.properties配置文件,如下:

nacos 默认数据存储 不使用mysql nacos使用内置数据库_数据源_10


添加神通数据源配置,如下:

nacos 默认数据存储 不使用mysql nacos使用内置数据库_数据源_11


这里用到的st和jdbcDriverName就是我们一开始添加上去的属性。

4.源码单例启动nacos

启动成功后,查看日志,

nacos 默认数据存储 不使用mysql nacos使用内置数据库_java_12


nacos 默认数据存储 不使用mysql nacos使用内置数据库_加载_13


可以发现此时加载的是神通数据源驱动了,以及日志提示加载的是外部数据源。

接着正常访问nacos控制台,做一些操作,如果有问题,就断点调试,找到问题,适配下sql。

5.源码打包

先要跳过一些格式上的校验和认证,可以参考如下地址:打包nacos源码报license_ 30 See RAT 接着cd xxxx/xxx/xx/Nacos-2.1.1,进入我们本地的nacos源码目录中,通过命令mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U打包,打包后的源码压缩包为Nacos-2.1.1\distribution\target\nacos-server-2.1.2.zip,如下:

nacos 默认数据存储 不使用mysql nacos使用内置数据库_java_14


有这个源码包后,我们就可以通过nacos的编译后压缩包方式来部署启动。

6.其余数据源实现

其余数据源也是大致的实现思路。