Config 是一个用户属性配置框架,它基于 Xbatis 实现,可以在 SpringBoot 应用环境中使用,对于某一个配置属性:
- 属性可以有默认值
- 不同的用户可以有不同的属性值
- 可以动态更新属性值
每一个配置属性必须为默认用户设置属性值。
用户属性配置数据存储于 MySQL,核心数据结构由以下三部分组成:
- 用户(uid)
- 属性名称(name)
- 属性值(value)
以配置属性 propertyA、propertyB,用户 userA、userB 为例:
uid | name | value |
---|---|---|
system | propertyA | valA |
userA | propertyA | valA2 |
system | propertyB | valB |
system 为默认用户。
如果获取配置属性名称 propertyA 的属性值(未指定用户,使用默认用户 system),返回 valA;
如果获取用户 userA、配置属性名称 propertyA 的属性值,返回 valA2;
如果获取配置属性名称 propertyB 的属性值(未指定用户,使用默认用户 system),返回 valB;
如果获取用户 userB、配置属性名称 propertyB 的属性值(未设置用户 userB、配置属性名称 propertyB 的属性值,使用默认用户 system、配置属性名称 propertyB的属性值),返回 valB;
如果获取配置属性名称不存在,返回 空值;
通过修改 MySQL 中指定用户、配置属性名称的属性值,即可以实现配置属性值的动态更新。
安装
下载源码
git clone https://github.com/njdi/durian.git
编译源码
cd durian/
切换至最新版本(Tag),如:0.4,
git checkout 0.4
编译安装至本地 Maven 仓库:
mvn clean package
添加依赖
SpringBoot 应用使用 Config 时,需要在 Maven pom.xml 中添加:
<dependency>
<groupId>io.njdi</groupId>
<artifactId>durian-xbatis</artifactId>
<version>${version}</version>
</dependency>
<dependency>
<groupId>io.njdi</groupId>
<artifactId>durian-config</artifactId>
<version>${version}</version>
</dependency>
${version} 替换为具体的版本号,如:0.4。
数据表
创建数据表:
CREATE TABLE `config` (
`id` int NOT NULL AUTO_INCREMENT,
`uid` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL,
`name` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL,
`value` varchar(256) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uid_name` (`uid`,`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
配置
SpringBoot 应用使用 Config 时,需要在 application.yml 中添加:
spring:
datasource:
url: jdbc:mysql://mysql_dev:13306/yurun?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
username: root
password: HUPf0elbIgAKekBR
hikari:
keepaliveTime: 30000
maxLifetime: 600000
maximumPoolSize: 30
mybatis:
mapper-locations: classpath:xbatis.xml
spring.datasource.* 相关属性用于配置数据库数据源。
数据表名称
数据表名称默认为 config,如果需要使用其它的名称,可以通过 application.yml 设置:
durian:
config:
table: ${tableName}
默认用户名称
默认用户名称为 system,如果需要使用其它的名称,可以通过 application.yml 设置:
durian:
config:
system: ${userName}
使用
XbatisManager
用户属性配置的获取和设置需要通过 XbatisManager 实例实现,SpringBoot 应用中可以自动注入:
@Autowired
private XbatisManager xbatisManager;
获取配置属性
获取指定配置属性名称(默认用户)的值:
configManager.get("string");
configManager.getInt("int");
configManager.getLong("long");
configManager.getFloat("float");
configManager.getDouble("double");
configManager.getBoolean("boolean");
获取指定配置属性名称(默认用户)的值(数组):
configManager.gets("strings");
configManager.getInts("ints");
configManager.getLongs("longs");
configManager.getFloats("floats");
configManager.getDoubles("doubles");
configManager.getBooleans("booleans");
获取指定用户、配置属性名称的值,可以使用上述方法名称的重载方法,如:
configManager.get("user", "string")
configManager.gets("user", "strings")
其它数据类型使用方法类似,不再赘述。
设置配置属性
设置指定配置属性名称(默认用户)的值:
configManager.set("string", "value");
设置指定用户、配置属性名称的值:
configManager.set("user", "string", "value");
其它数据类型使用方法类似,不再赘述。
列出配置属性
列出所有用户的所有配置属性:
List<ConfigBo> list(int page, int pageSize);
列出指定用户的所有配置属性:
List<ConfigBo> listByUid(String uid, int page, int pageSize);
列出指定配置属性名称的所有用户属性:
List<ConfigBo> listByName(String name, int page, int pageSize);
ConfigBo 的一个实例对象表示一个用户配置属性。
删除配置属性
删除指定 ID 的配置属性:
void delete(int id);
用户配置属性的 ID 可以通过 ConfigBo 获取。
删除指定用户、配置属性名称的配置属性:
void delete(String uid, String name);
删除指定用户的所有配置属性:
void deletesByUid(String uid);
删除指定配置属性名称的所有配置属性:
void deletesByName(String name);
缓存
Config 兼容 SpringBoot Caching。