前言
使用场景,类似数据库配置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);