博客系统数据库参数注入功能实现


placeholder image
admin 发布于:2022-05-09 10:26:14
阅读:loading

本站后台管理功能中提供了“参数管理”的功能,主要是将一些功能上的配置参数存储至数据库表中,减少在application.yaml中的参数配置,同时提供页面在线管理,支持参数修改后的立即生效。(此功能类似参数配置中心,但仅是博客站点的一个小小功能)。主要是提供数据库表来进行参数配置,多以功能模块的内部参数为主,同时在服务器启动时读取该表中的所有参数,将其注入至对应功能中去,详细介绍参考如下。

实现原理

注入机制服务器启动完毕,读取参数配置表的数据以及所有的参数配置类组件,通过对应注解和调用setter属性方法进行参数设置,利用Spring Bean单例的特性实现对参数数据的内存存储
参数读取通过Aop的方式读取特殊的参数配置类中的所有get开头的属性方法,从内存中读取最新数据对象,将参数值获取并返回
使用方式
通过参数对象的形式,注入其属性值,并作为Spring Bean对象的形式对外注入访问
数据注入通过Javabean的方式注入对象中的各个包含参数注入的注解,通过其getter/setter进行参数赋值和访问
赋值类型支持String、Integer、Double、Float、Boolean、Date、Map等多种数据类型
匹配模式支持完全匹配、前缀匹配、后缀匹配、按组匹配、默认匹配等多种参数匹配方式

参考代码

package cn.chendd.toolkit.dbproperty.commonents;

import ...;

/**
 * 参数表数据映射对象
 *
 * @author chendd
 * @date 2019/9/13 8:05
 */
@Data
@DbValueConfiguration
@Component
public class SysDbValueMapping extends AbstractSysDbValueMapping {

    @DbValue
    private String httpServerIp;

    @DbValue("http.server.ip")
    private String httpServerIpBak;

    @DbValue("http.server.name")
    private String httpServerName;

    @DbValue("http.server.port")
    private Integer httpServerPort;

    @DbValue(suffix = "key.pi")
    private Double piSuffix;

    @DbValue(prefix = "test.key")
    private Double piPrefix;

    @DbValue("test.status")
    private Boolean status;

    @DbValue(prefix = "http.server")
    private Map<String , String> servers;

    @DbValue(group = "test.database")
    private Map<String , String> databases;

    @DbValue(prefix = "http", suffix = "name")
    private Map<String , String> connects;

    @DbValue("test.database.host1")
    private String mysqlPort;
    
    @DbValue(group = "third.login.github")
    private GithubConfig githubConfig;
    
}

【代码说明】

1.@DbValue无参数表示将httpServerIp的驼峰变量命名转换为http.server.ip的对应参数;

2.@DbValue("http.server.ip")对应读取表中的key;

3.@DbValue(prefix = "test.key")表示将key的前缀为test.key的参数读取注入;

4.@DbValue(suffix = "key.pi")表示将key的后缀为key.pi的参数读取并注入;

5.@DbValue(prefix = "http.server")表示将key的前缀为http.server开头的所有key读取并赋值至Map<String , String>中;

6.@DbValue(group = "third.login.github")表示将一个组group为third.login.github的所有参数赋值至GithubConfig对象中;

数据库表

CREATE TABLE `sys_db_value` (
  `id` bigint(20) NOT NULL COMMENT '主键ID',
  `key` varchar(64) DEFAULT NULL COMMENT '参数名',
  `value` varchar(2048) DEFAULT NULL COMMENT '参数值',
  `group` varchar(32) DEFAULT NULL COMMENT '参数组名',
  `remark` varchar(512) DEFAULT NULL COMMENT '参数备注',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统参数配置表';

页面功能

image.png

(列表管理)

image.png

(新增/修改页面)

更多代码实现可见本站开放的源代码。

 点赞


 发表评论

当前回复:作者

 评论列表


留言区