Config:用户属性配置框架

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

上一篇:可变数组结构删除操作的测试


下一篇:【NOI2022省选挑战赛 Contest4 B】取石子(博弈论)