package com.java110.event.center.init;
|
|
import com.java110.common.factory.ApplicationContextFactory;
|
import com.java110.event.app.AppEventPublishing;
|
import com.java110.event.center.DataFlowEventPublishing;
|
import com.java110.event.center.DataFlowListener;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springframework.core.io.ClassPathResource;
|
import org.springframework.core.io.support.PropertiesLoaderUtils;
|
|
import javax.naming.ConfigurationException;
|
import java.util.Properties;
|
|
/**
|
* 系统启动时加载信息
|
* Created by wuxw on 2017/4/14.
|
*/
|
public class EventConfigInit {
|
|
/**
|
* 默认 事件配置路径classpath:/
|
*/
|
private final static String DEFAULT_EVENT_PATH = "config/";
|
|
|
/**
|
* 默认 文件名称 .properties
|
*/
|
private final static String DEFAULT_FILE_NAME = "center_event.properties";
|
|
/**
|
* 订单调度处理侦听
|
*/
|
private final static String DATAFLOW_LISTENER = "java110.event.properties.centerServiceListener";
|
|
/**
|
* 订单调度事件
|
*/
|
private final static String DISPATCH_EVENT = "java110.event.properties.centerServiceEvent";
|
|
|
public static void initSystemConfig(){
|
//加载配置文件,注册订单处理侦听
|
try {
|
|
Properties properties = load(DEFAULT_EVENT_PATH,DEFAULT_FILE_NAME);
|
|
registerListener(properties);
|
|
//注册事件
|
registerEvent(properties);
|
|
}
|
catch (Exception ex) {
|
throw new IllegalStateException("system init error", ex);
|
}
|
}
|
|
|
/**
|
* 加载文件
|
* @param location
|
* @param filename
|
* @param
|
*/
|
private static Properties load(String location,String filename) throws Exception{
|
Properties properties = PropertiesLoaderUtils.loadProperties(new ClassPathResource(location+filename));
|
return properties;
|
}
|
|
/**
|
* 注册侦听
|
* @param properties
|
*/
|
private static void registerListener(Properties properties) throws Exception{
|
|
String[] listeners = properties.getProperty(DATAFLOW_LISTENER).split("\\,");
|
|
for(String listener : listeners){
|
|
//这里不能直接反射,这样 IXXXService 无法注入,所以直接从spring 中获取已经注入的
|
DataFlowListener<?> dataFlowListener = (DataFlowListener<?>) ApplicationContextFactory.getBean(listener);
|
|
//将 listener 放入 AppEventPublishing 中方便后期操作
|
//注册侦听
|
DataFlowEventPublishing.addListenner(dataFlowListener);
|
}
|
}
|
|
/**
|
* 注册事件
|
* @param properties
|
* @throws Exception
|
*/
|
private static void registerEvent(Properties properties) throws Exception{
|
String[] events = properties.getProperty(DISPATCH_EVENT).split("\\,");
|
|
for (String event : events){
|
|
if(StringUtils.isBlank(event) || !event.contains("::")){
|
throw new ConfigurationException("配置错误,["+DISPATCH_EVENT+"= "+events+"] 当前 [event = "+event+"],不存在 :: ,配置格式为 A::B");
|
}
|
|
String[] tmpEvent = event.split("::");
|
|
if(tmpEvent.length > 2){
|
throw new ConfigurationException("配置错误,["+DISPATCH_EVENT+"= "+events+"] 当前 [event = "+event+"],只能有一个 :: ,配置格式为 A::B");
|
}
|
|
Class clazz = Class.forName(tmpEvent[1]);
|
|
AppEventPublishing.addEvent(tmpEvent[0],clazz);
|
}
|
|
}
|
|
|
}
|