需求:
有一组映射关系,为了避免频繁改动造成不停打包更新的麻烦,需要将映射关系写进配置文件里,如果有更新,只需要更改配置文件并重启即可
我的xml:
<?xml version="1.0" encoding="UTF-8"?>
<MAPs>
<!--test sample-->
<map>
<icuId>1</icuId>
<serverIP>1.1</serverIP>
</map>
<map>
<icuId>2</icuId>
<serverIP>2.2</serverIP>
</map>
<map>
<icuId>3</icuId>
<serverIP>3.3</serverIP>
</map>
<map>
<icuId>4</icuId>
<serverIP>4.4</serverIP>
</map>
<map>
<icuId>5</icuId>
<serverIP>5.5</serverIP>
</map>
</MAPs>
读取XML的工具类:
package com.siemens.sitracs_configtools.conf;
import com.siemens.sitracs_configtools.common.StaticCache;
import com.siemens.sitracs_configtools.model.IPMap;
import org.dom4j.Document;
import com.siemens.sitracs_configtools.util.XMLReader;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import java.util.Iterator;
/**
* @author SongShilun
* @create 2021/5/17 11:39
* @desc
**/
public class XMLConfReader {
public static void readXMLFile(){
try {
Document document= XMLReader.parse("src/main/resources/URLMapping.xml");
Element rootElement = document.getRootElement();//MAPs
for (Iterator<Element> it = rootElement.elementIterator("map"); it.hasNext();) {
Element element = it.next();
IPMap map=new IPMap(element);
StaticCache.IPMappingMap.put(map.getIcuId(),map.getServerIP());
}
System.out.println("ipmapping--size--===="+StaticCache.IPMappingMap.size());
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
其中用到的IPMap实体类:
package com.siemens.sitracs_configtools.model;
import org.dom4j.Element;
/**
* @author SongShilun
* @create 2021/5/17 12:32
* @desc
**/
public class IPMap {
private String icuId;
private String serverIP;
public IPMap(){
}
public IPMap(Element element){
this.icuId=element.element("icuId").getTextTrim();
this.serverIP=element.element("serverIP").getTextTrim();
}
public String getIcuId() {
return icuId;
}
public void setIcuId(String icuId) {
this.icuId = icuId;
}
public String getServerIP() {
return serverIP;
}
public void setServerIP(String serverIP) {
this.serverIP = serverIP;
}
}
总体步骤及原理:
- 先定义一个XML文件,XML文件里的标签可以自己定义;
- 引入以下依赖,使用dom4j读取XML文件里的标签内容
<!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
- 如XMLConfReader .java 代码所示,分层读取XML文件里的内容,并将单个元素封装为实体,添加get/set方法就可以对其中的元素进行读写。