有时候赶鸭子上架做成烤鸭,那么它是一道工艺,我们就需要一个固定的秘方。其实产品项目也是如此,一个项目上线测功后,需要快速推广其他地区,改改一些配置方式即可。后续需求调整另当别论。
产品需求
满足当同一个表单配置,被多个具体项目共享时,无法更改表单具体访问的业务数据库的问题
多元环境
连接令牌
数据连接
支持本地化连接串配置
rong:
ep:
form:
db:
556cc3525974d5b0yy1659062b2ff8f5:
db_dev_url: username=pig;password=pig;url=jdbc:mysql://xx.0.0.188:3306/pig_form;
db_prd_url: username=pig;password=pig;url=jdbc:mysql://xx.0.0.188:3306/pig_form;
db_test_url: username=pig;password=pig;url=jdbc:mysql://xx.0.0.188:3306/pig_form;
代码审查
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import org.springframework.core.env.Environment;
import org.springframework.core.env.PropertySource;
import org.springframework.web.context.support.StandardServletEnvironment;
import javax.annotation.Resource;
import java.util.*;
@Service
public class PrjDbConfigServiceImpl implements PrjDbConfigService {
@Resource
private Environment env;
/**
* 【优化】支持本地化连接串配置
* rong.ep.form.db.{dbId}.{key} = {value},用于在表单请求数据切换数据源时,优先使用该配置作为数据源配置
* dbId: 连接串唯一令牌
* key: 连接串表属性名称
* value: 连接串表属性值
* rong.ep.form.db.556cc3525974d5b0yy1659062b2ff8f5.db_dev_url = 'username=pig;password=pig;url=jdbc:mysql://xx.0.0.188:3306/pig_form'
*
* @return
*/
public List<Map<String, String>> obtainEnv() {
List<Map<String, String>> dbMapList = new ArrayList<>();
StandardServletEnvironment sEnv = (StandardServletEnvironment) env;
Iterator<PropertySource<?>> iterator = sEnv.getPropertySources().iterator();
while (iterator.hasNext()) {
PropertySource<?> source = iterator.next();
Object o = source.getSource();
if (o instanceof Map) {
for (Map.Entry<String, Object> entry : ((Map<String, Object>) o).entrySet()) {
String key = entry.getKey();
if (!ObjectUtil.toString(key).contains("strong.ep.form.db.")) {
continue;
}
//截取 rong.ep.form.db.{dbId}.{key} = {value}
String name = "rong.ep.form.db.";
String dbId = StrUtil.subBetween(key, name, ".db_");
String keySub = StrUtil.subAfter(key, name + dbId + ".", false);
Map<String, String> dbMap = new HashMap<>(3);
dbMap.put("dbConnId", dbId);
dbMap.put("dbUrlKey", keySub);
dbMap.put("dbUrlUrl", sEnv.getProperty(key));
dbMapList.add(dbMap);
}
}
}
return dbMapList;
}
}