nacos的源码跟读
使用方通过JdbcTemplate获取数据源dataSource ------>按逻辑加载dataSource ------------->执行相关代码
默认的逻辑:
- standalone模式默认启动derby数据源加载,但是在加载前需要比对spring.datasource.platform是否为derby模式,否则回归外置数据源加载
- 外置数据源加载类为ExternalDataSourceServiceImpl,通过配置文件读取相关的数据源配置信息实现加载,数据源默认使用Hikari
自定义数据源插件
官方提供的插件
自定义插件的实现步骤
- 仿照Mysql相关插件实现相关Mapper接口,注意不同数据库的方言。
- 修改nacos相关配置文件。
- 打包插件并将插件包上传到指定的目录,重启服务。
具体说明
仿照Mysql相关插件实现相关Mapper接口,注意不同数据库的方言。
新建一个maven项目,引入依赖
``
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-datasource-plugin</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-common</artifactId>
<scope>provided</scope>
<version>2.2.0</version>
</dependency>
复制官方Mysql实现类,并修改包名,类名。
重写每个实现类中getDataSource方法,并调整不兼容的数据库方言。
``
@Override
public String getDataSource() {
return DataSourceConstant.POSTGRES;
}
此处以PostgreSQL为例,nacos涉及的代码主要为CRUD,其中pg与Mysql主要的差异点在于Mysql支持limt ?,? 的写法进行分页查询,而pg仅支持offset ? limit ?的写法,故全局搜索limit关键字修改相关的方言实现。如
``
@Override
public String findConfigInfoAggrByPageFetchRows(int startRow, int pageSize) {
return "SELECT data_id,group_id,tenant_id,datum_id,app_name,content FROM config_info_aggr WHERE data_id= ? AND " + "group_id= ? AND tenant_id= ? ORDER BY datum_id OFFSET " + startRow + "LIMIT " + pageSize;
}
修改nacos相关配置文件。
spring.datasource.platform=postgresql
### Count of DB:
db.num=1
### Connect URL of DB:
db.pool.config.driverClassName=org.postgresql.Driver
db.url.0=jdbc:postgresql://????/zhdz_nacos?charSet=UTF8&connectTimeout=1000&socketTimeout=3000&ssl=false¤tSchema=public
db.user=????
db.password=????
}
打包插件并将插件包上传到指定的目录,重启服务。
在nacos主目录下新建plugins目录
cd /usr/local/nacos
mkdir plugins
目录结构如下图所示。
将打包后的插件包与数据库驱动上传到plugins目录下,重启服务。