更替 @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);
	@Autowired
	private Handyman handyman;

	public String get(String k) {
		String r = "";
		rl.lock();
		try {
			r = kvs.get(k);
		} finally {
			rl.unlock();
		}
		return r;
	}

	@PostConstruct
	public 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 concern
					if(!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();
		}

	}

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章