本文主要是介绍更替 @value 在修改配置之后,重新加载数据的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
原理是:将数据库变量放在一个全局的Map中,通过get读取,写好一个方法,用来操作数据库配置项的加载,当每次数据库配置项更改后,调取这个方法就可以实现刷新效果
@Component
public class BizConf {private ReadWriteLock rwLock = new ReentrantReadWriteLock();private final Lock rl = rwLock.readLock();private final Lock wl = rwLock.writeLock();private HashMap<String, String> kvs = new HashMap<String, String>();private static Logger logger = LoggerFactory.getLogger(BizConf.class);@Autowiredprivate Handyman handyman;public String get(String k) {String r = "";rl.lock();try {r = kvs.get(k);} finally {rl.unlock();}return r;}@PostConstructpublic void refresh() {wl.lock();try {List<ProxyPropertiesT> proxyPropertiesTs = handyman.allProxyList();for (int i = 0; i < proxyPropertiesTs.size(); i++) {ProxyPropertiesT proxyPropertiesT = proxyPropertiesTs.get(i);String key = proxyPropertiesT.getProxyCode() + "_" + proxyPropertiesT.getConfigKey();String value = proxyPropertiesT.getConfigValue();if (StringUtils.isNotBlank(key) && StringUtils.isNotBlank(value)) {//ignore password base on security concernif(!key.contains("password")) {logger.info("load property. Key=" + key + ",Value=" + value);}kvs.put(key, value);}}List<SystemT> systemTs = handyman.allSystemConfig();for (int i = 0; i < systemTs.size(); i++) {SystemT systemT = systemTs.get(i);String key = systemT.getSystemKey();String value = systemT.getSystemValue();if (StringUtils.isNotBlank(key) && StringUtils.isNotBlank(value)) {logger.info("load property. Key=" + key + ",Value=" + value);kvs.put(key, value);}}} finally {wl.unlock();}}}
这篇关于更替 @value 在修改配置之后,重新加载数据的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!