Config:用户属性配置框架

117 阅读3分钟

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