【cnipa】一种配置令牌连接数据库解决方法

有时候赶鸭子上架做成烤鸭,那么它是一道工艺,我们就需要一个固定的秘方。其实产品项目也是如此,一个项目上线测功后,需要快速推广其他地区,改改一些配置方式即可。后续需求调整另当别论。

产品需求

满足当同一个表单配置,被多个具体项目共享时,无法更改表单具体访问的业务数据库的问题

多元环境

在这里插入图片描述

连接令牌

在这里插入图片描述

数据连接

支持本地化连接串配置

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;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

掘金者说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值