文章目录
- 1. 前言
- 2. Derby
- 3. Mysql
- 3.1 初始化脚本
- 3.2 服务端配置
- 3.3 验证
- 4. 数据源插件
1. 前言
Nacos中的用户、租户、服务配置等信息,需要使用关系型数据库进行存储,在实际开发中,可能还会面临各种数据库适配问题。
2. Derby
Derby是Apache一个开源用纯Java编写的关系数据库管理系统。
Derby最大的特点就是简单易用,可以直接嵌入到JAVA应用程序中,所以Nacos默认使用Derby作为内嵌数据库。
在\nacos\data目录下可以看到相关数据文件:

3. Mysql
Derby虽然简单易用,但是数据不好维护,在集群环境下,无法共享数据,所以Nacos默认也支持Mysql数据库。
3.1 初始化脚本
在/nacos/conf配置文件目录下,提供了mysql-schema.sql脚本:

首先在Mysql中创建数据库,并执行脚本,成功创建了12张表:

表说明如下:
| 表名 | 说明 |
|---|---|
| config_info | 配置信息表 |
| config_info_aggr | 配置聚合表 |
| config_info_beta | 灰度配置信息表 |
| config_info_tag | 标签对应的特殊配置信息表 |
| config_tags_relation | 配置标签信息表 |
| group_capacity | 集群、各分组容量信息表 |
| his_config_info | 配置历史信息表 |
| tenant_capacity | 租户容量信息表 |
| tenant_info | 租户信息表 |
| users | 用户信息表 |
| roles | 角色表 |
| permissions | 角色权限表 |
说明: 这里使用的是Mysql 8.0.29。
3.2 服务端配置
服务端默认已经引入了Mysql驱动:

所以我们只需要在application.properties中配置一些连接信息即可:
#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
### Deprecated configuration property, it is recommended to use `spring.sql.init.platform` replaced.
### spring.datasource.platform=mysql
spring.sql.init.platform=mysql### Count of DB:
db.num=1### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/pearl_nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root### Connection pool configuration: hikariCP
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
3.3 验证
在控制台添加一个新用户,查看users表:

4. 数据源插件
在目前信创计划的环境下,很多软件系统都需要适配国产数据库,Nacos也不例外。在Nacos之前的版本中,想适配国产数据库是比较难的,只能自己修改很多源码。
之前版本所有的SQL操作的执行是通过直接使用JdbcTemplate执行固定SQL语句的形式,使得SQL语句与业务逻辑高度耦合,并且只支持Derby与MySQL两种数据源。
原有架构如下:

Nacos从2.2.0版本开始,可通过SPI机制注入多数据源实现插件,并在引入对应数据源实现后,便可在Nacos启动时通过读取application.properties配置文件中spring.datasource.platform配置项选择加载对应数据源插件。
数据源插件通过SPI机制,将SQL操作按照数据表进行抽象出多个Mapper接口,Mapper接口的实现类需要按照不同的数据源编写对应的SQL方言实现。现在插件默认提供Derby以及MySQL的Mapper实现,可直接使用,而其他的数据源则需要用户使用数据源插件进行加载。
其改造后架构图如下:

注意: 目前多数据源插件处于Beta测试阶段,其API及接口方法定义可能会在后续版本升级而有较大修改,请注意您的插件适用版本。
由于目前还不是正式发布版本,所以后续再进行国产数据库适配演示。