java-从数据库加载泛型key-value自定义配置


前言

使用场景,类似数据库配置properties ,如读取数据库配置动态开启或者关闭某个功能,如配置接收或发送邮件的账号信息。


提示:以下是本篇文章正文内容,下面案例可供参考

一、准备工作

1. 定义数据库和entity

CREATE TABLE  custom_config` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `des` varchar(255) DEFAULT NULL COMMENT '简介',
  `key` varchar(255) NOT NULL COMMENT '配置的key',
  `value` varchar(1000) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `Unique_key_key` (`key`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
@Data
public class CustomConfig {
    private Integer id;
    private String des;
    private String key;
    private String value;
}

2. 定义配置枚举类

使用用时我们需要定义一个配置类
枚举的名称-对于数据库中key
Class-对于数据库中的value的格式,可以是基础数据类型,也可以自定义实体类
des- 对于数据库中的des

public enum CustomConfigEnum {
   ;
    private Class clazz;
    private String des;
    
    CustomConfigEnum(){
    }
    CustomConfigEnum( Class clazz, String des) {
        this.clazz = clazz;
        this.des = des;
    }
	//省略get和set
}

3. 提供调用service

可根据传入的key枚举获取不同泛型的返回值

public interface CustomConfigService {
    <T> T getJsonValue(CustomConfigEnum configEnum);
}
@Service
public class CustomConfigServiceImpl implements CustomConfigService {
@Override
   public <T> T getJsonValue(CustomConfigEnum objectEnum) {
  		// 查询数据库 	
       CustomConfig config = this.getCustomConfig(objectEnum.name());
       if (config == null) return null;

       String v = config.getValue();
       if (v == null) return null;

       Class clazz = objectEnum.getClazz();
       if (String.class.isAssignableFrom(clazz)) {
           T ret = (T) v;
           return ret;
       } else if (Integer.class.isAssignableFrom(clazz)) {
           T ret = (T) v;
           return ret;
       } else if (Double.class.isAssignableFrom(clazz)) {
           T ret = (T) v;
           return ret;
       } else if (Float.class.isAssignableFrom(clazz)) {
           T ret = (T) v;
           return ret;
       } else if (Long.class.isAssignableFrom(clazz)) {
           T ret = (T) v;
           return ret;
       } else if (Boolean.class.isAssignableFrom(clazz)) {
           T ret = (T) v;
           return ret;
       } else {
           Object o = JSONObject.parseObject(v, clazz);
           T ret = (T) o;
           return ret;
       }
   }
}

二、实际使用

1.基础类型

在CustomConfigEnum 添加一条配置
@Data
public enum CustomConfigEnum {
   ENABLE_MONITOR(String.class,"开启监控,Y|N");
    private Class clazz;
    private String des;
 }
使用
 String config2 = customConfigService.<String>getJsonValue(CustomConfigEnum.ENABLE_MONITOR);

2.自定义json格式

在CustomConfigEnum 添加一条配置
@Data
public enum CustomConfigEnum {
   ENABLE_MONITOR(String.class,"开启监控,Y|N"),
   MAIL_CONFIG(MailConfig .class,"邮箱配置");
    private Class clazz;
    private String des;
 }
 自定义格式
@Data
public class MailConfig {
    private String host;
    private String port;
    private String userName;
    private String password;
    private String from;
    private Long timeout ;
}
使用
 MailConfig config = customConfigService.<MailConfig >getJsonValue(CustomConfigEnum.MAIL_CONFIG);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值