文章目录
- 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
及接口方法定义可能会在后续版本升级而有较大修改,请注意您的插件适用版本。
由于目前还不是正式发布版本,所以后续再进行国产数据库适配演示。