Commit 192cfd39 by huangfusuper

Plugin XML配置解析工具重构

parent abf792c4
......@@ -45,6 +45,12 @@
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.byit.model;
import com.byit.registry.PluginServiceRegistry;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
/**
* 映射服务器配置
* @author huangfu
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class ServerConfigurationModel {
private Integer port;
private String registryUrl;
private String serverBiz;
private String serverEnv;
private Integer coreSize;
private Integer maxSize;
private String pluginServiceRegistry;
private String pluginServerClass;
}
package com.byit.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.util.List;
import java.util.Map;
/**
* 服务配置文件的实体
* @author huangfu
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class ServiceConfigModel {
private Boolean autoScan;
private ServerConfigurationModel serverConfigurationModel;
private Map<String,String> classNames;
}
package com.byit.utils;
import com.byit.enums.LauncherEnum;
import com.byit.exptions.LauncherException;
import com.byit.model.ServerConfigurationModel;
import com.byit.model.ServiceConfigModel;
import org.apache.commons.lang3.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;
/**
* 配置文件解析工具类
* @author huangfu
*/
public class XmlParseUtil {
/**
* 解析的工具方法
* @param filePath 文件路径 相对
*/
public static ServiceConfigModel parse(String filePath){
ServiceConfigModel serviceConfigModel = new ServiceConfigModel();
serviceConfigModel.setServerConfigurationModel(new ServerConfigurationModel());
URL resource = XmlParseUtil.class.getResource(filePath);
SAXReader reader = new SAXReader();
Document document;
try {
document = reader.read(resource);
} catch (DocumentException e) {
e.printStackTrace();
throw new LauncherException(LauncherEnum.XML_DATA_ERROR.getMsg());
}
Element rootElement = document.getRootElement();
if(rootElement == null){
throw new LauncherException(LauncherEnum.XML_DATA_ERROR.getMsg());
}
//开始解析内部数据 serverConfiguration
Element autoScanElement = rootElement.element("autoScan");
String value = autoScanElement.attributeValue("value");
serviceConfigModel.setAutoScan(Boolean.parseBoolean(value));
//开始解析内部数据 serverConfiguration
Element serverConfigurationElement = rootElement.element("serverConfiguration");
Element classNamesElement = rootElement.element("classNames");
parseServerConfiguration(serverConfigurationElement,serviceConfigModel);
packageScanValueParse(classNamesElement,serviceConfigModel);
return serviceConfigModel;
}
/**
* 解析 ServerConfiguration
* @param serverConfigurationElement 服务
* @param serviceConfigModel 实体
*/
private static void parseServerConfiguration(Element serverConfigurationElement,ServiceConfigModel serviceConfigModel){
ServerConfigurationModel serverConfigurationModel = serviceConfigModel.getServerConfigurationModel();
Element portElement = serverConfigurationElement.element("port");
Element registryUrlElement = serverConfigurationElement.element("registryUrl");
Element serverBizElement = serverConfigurationElement.element("server-biz");
Element serverEnvElement = serverConfigurationElement.element("server-env");
Element serverThreadElement = serverConfigurationElement.element("server-thread");
Element pluginServiceRegistryElement = serverConfigurationElement.element("pluginServiceRegistry");
Element pluginServerClassElement = serverConfigurationElement.element("pluginServerClass");
portParse(portElement,serverConfigurationModel);
serverStringParse(registryUrlElement,value -> {
serverConfigurationModel.setRegistryUrl(value);
});
serverStringParse(serverBizElement, value -> {
serverConfigurationModel.setServerBiz(value);
});
serverStringParse(serverEnvElement, value -> {
serverConfigurationModel.setServerEnv(value);
});
serverThreadParse(serverThreadElement,serverConfigurationModel);
if (pluginServiceRegistryElement != null) {
serverStringParse(pluginServiceRegistryElement,value ->{
if (StringUtils.isNotBlank(value)) {
serverConfigurationModel.setPluginServiceRegistry(value);
}
});
}
if (pluginServerClassElement != null) {
serverStringParse(pluginServerClassElement,value ->{
if (StringUtils.isNotBlank(value)) {
serverConfigurationModel.setPluginServerClass(value);
}
});
}
}
/**
* 端口解析
* @param portElement 端口
* @param serverConfigurationModel 配置引用
*/
private static void portParse(Element portElement,ServerConfigurationModel serverConfigurationModel){
String portStr = portElement.attributeValue("value");
try {
int port = Integer.parseInt(portStr.trim());
serverConfigurationModel.setPort(port);
}catch (Exception e){
e.printStackTrace();
throw new LauncherException(LauncherEnum.XML_PORT_SET_ERROR.getMsg());
}
}
/**
* 端口解析
* @param element element
*/
private static void serverStringParse(Element element, BaseCallback baseCallback){
String bizStr = element.attributeValue("value");
String biz = bizStr.trim();
try {
baseCallback.run(biz);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* @param element 节点
* @param serverConfigurationModel 配置
*/
private static void serverThreadParse(Element element,ServerConfigurationModel serverConfigurationModel){
String coreSizeStr = element.attributeValue("core-size");
String maxSizeStr = element.attributeValue("max-size");
if (StringUtils.isNotBlank(coreSizeStr)) {
serverConfigurationModel.setCoreSize(Integer.parseInt(coreSizeStr.trim()));
}else{
serverConfigurationModel.setCoreSize(-1);
}
if(StringUtils.isNotBlank(maxSizeStr)){
serverConfigurationModel.setMaxSize(Integer.parseInt(maxSizeStr.trim()));
}else{
serverConfigurationModel.setMaxSize(-1);
}
}
/**
* 解析package
* @param packageRootElement 任务类
* @param serviceConfigModel 配置引用
*/
private static void packageScanValueParse(Element packageRootElement,ServiceConfigModel serviceConfigModel){
Iterator<Element> elementIterator = packageRootElement.elementIterator();
while (elementIterator.hasNext()) {
Element packageElement = elementIterator.next();
String packageElementText = packageElement.attributeValue("class");
String jobNameText = packageElement.attributeValue("jobName");
if(serviceConfigModel.getClassNames() == null){
serviceConfigModel.setClassNames(new ConcurrentHashMap<>(8));
}
serviceConfigModel.getClassNames().put(jobNameText,packageElementText);
}
}
private interface BaseCallback{
void run(String value);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<executor-plugin>
<autoScan value="false"/>
<serverConfiguration>
<port value="8989"/>
<registryUrl value="http://slocalhost:8080"/>
<server-biz value="myth-job"/>
<server-env value="dev"/>
<server-thread core-size="" max-size=""/>
<pluginServiceRegistry value="com.byit.Test"/>
<pluginServerClass value="com.byit.Test"/>
</serverConfiguration>
<classNames>
<className jobName="demo" class="com.byit.job.DemoJob"/>
<className jobName="demo1" class="com.byit.job.EndNode"/>
<className jobName="demo2" class="com.byit.job.StartNode"/>
</classNames>
</executor-plugin>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<executor-plugin>
<port>8899</port>
<auto-scan value="false"></auto-scan>
<autoScan value="false"/>
<serverConfiguration>
<port value="8989"/>
<server-biz value="myth-job"/>
<server-env value="dev"/>
<server-thread core-size="" max-size=""/>
<pluginServiceRegistry class=""/>
<pluginServerClass class=""/>
</serverConfiguration>
<classNames>
<className>com.byit.job.DemoJob</className>
<className>com.byit.job.EndNode</className>
<className>com.byit.job.StartNode</className>
<className class="com.byit.job.DemoJob"/>
<className class="com.byit.job.EndNode"/>
<className class="com.byit.job.StartNode"/>
</classNames>
</executor-plugin>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment