
com.baidu.disconf.client.DisconfMgr Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of disconf-client Show documentation
Show all versions of disconf-client Show documentation
https://github.com/knightliao/disconf/tree/master/disconf-client
package com.baidu.disconf.client;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import com.baidu.disconf.client.config.ConfigMgr;
import com.baidu.disconf.client.config.DisClientConfig;
import com.baidu.disconf.client.core.DisconfCoreFactory;
import com.baidu.disconf.client.core.DisconfCoreMgr;
import com.baidu.disconf.client.scan.ScanFactory;
import com.baidu.disconf.client.scan.ScanMgr;
import com.baidu.disconf.client.store.DisconfStoreProcessorFactory;
import com.baidu.disconf.client.support.registry.Registry;
import com.baidu.disconf.client.support.registry.RegistryFactory;
/**
* Disconf Client 总入口
*
* @author liaoqiqi
* @version 2014-5-23
*/
public class DisconfMgr implements ApplicationContextAware {
protected static final Logger LOGGER = LoggerFactory.getLogger(DisconfMgr.class);
// 本实例不能初始化两次
private boolean isFirstInit = false;
private boolean isSecondInit = false;
// application context
private ApplicationContext applicationContext;
// 核心处理器
private DisconfCoreMgr disconfCoreMgr = null;
// scan mgr
private ScanMgr scanMgr = null;
protected static final DisconfMgr INSTANCE = new DisconfMgr();
public static DisconfMgr getInstance() {
return INSTANCE;
}
private DisconfMgr() {
}
/**
* 总入口
*/
public synchronized void start(List scanPackageList) {
firstScan(scanPackageList);
secondScan();
}
/**
* 第一次扫描,静态扫描 for annotation config
*/
protected synchronized void firstScan(List scanPackageList) {
// 该函数不能调用两次
if (isFirstInit) {
LOGGER.info("DisConfMgr has been init, ignore........");
return;
}
//
//
//
try {
// 导入配置
ConfigMgr.init();
LOGGER.info("******************************* DISCONF START FIRST SCAN *******************************");
// registry
Registry registry = RegistryFactory.getSpringRegistry(applicationContext);
// 扫描器
scanMgr = ScanFactory.getScanMgr(registry);
// 第一次扫描并入库
scanMgr.firstScan(scanPackageList);
// 获取数据/注入/Watch
disconfCoreMgr = DisconfCoreFactory.getDisconfCoreMgr(registry);
disconfCoreMgr.process();
//
isFirstInit = true;
LOGGER.info("******************************* DISCONF END FIRST SCAN *******************************");
} catch (Exception e) {
LOGGER.error(e.toString(), e);
}
}
/**
* 第二次扫描, 动态扫描, for annotation config
*/
protected synchronized void secondScan() {
// 该函数必须第一次运行后才能运行
if (!isFirstInit) {
LOGGER.info("should run First Scan before Second Scan.");
return;
}
// 第二次扫描也只能做一次
if (isSecondInit) {
LOGGER.info("should not run twice.");
return;
}
LOGGER.info("******************************* DISCONF START SECOND SCAN *******************************");
try {
// 扫描回调函数
if (scanMgr != null) {
scanMgr.secondScan();
}
// 注入数据至配置实体中
// 获取数据/注入/Watch
if (disconfCoreMgr != null) {
disconfCoreMgr.inject2DisconfInstance();
}
} catch (Exception e) {
LOGGER.error(e.toString(), e);
}
isSecondInit = true;
//
// 不开启 则不要打印变量map
//
if (DisClientConfig.getInstance().ENABLE_DISCONF) {
//
String data = DisconfStoreProcessorFactory.getDisconfStoreFileProcessor()
.confToString();
if (!StringUtils.isEmpty(data)) {
LOGGER.info("Conf File Map: {}", data);
}
//
data = DisconfStoreProcessorFactory.getDisconfStoreItemProcessor()
.confToString();
if (!StringUtils.isEmpty(data)) {
LOGGER.info("Conf Item Map: {}", data);
}
}
LOGGER.info("******************************* DISCONF END *******************************");
}
/**
* reloadable config file scan, for xml config
*/
public synchronized void reloadableScan(String fileName) {
if (!isFirstInit) {
return;
}
if (DisClientConfig.getInstance().ENABLE_DISCONF) {
try {
if (!DisClientConfig.getInstance().getIgnoreDisconfKeySet().contains(fileName)) {
if (scanMgr != null) {
scanMgr.reloadableScan(fileName);
}
if (disconfCoreMgr != null) {
disconfCoreMgr.processFile(fileName);
}
LOGGER.debug("disconf reloadable file: {}", fileName);
}
} catch (Exception e) {
LOGGER.error(e.toString(), e);
}
}
}
/**
* @Description: 总关闭
*/
public synchronized void close() {
try {
// disconfCoreMgr
LOGGER.info("******************************* DISCONF CLOSE *******************************");
if (disconfCoreMgr != null) {
disconfCoreMgr.release();
}
// close, 必须将其设置为False,以便重新更新
isFirstInit = false;
isSecondInit = false;
} catch (Exception e) {
LOGGER.error("DisConfMgr close Failed.", e);
}
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy