从xml配置文件中取配置的常用字段存入缓存,当文件更新时同步更新文件内容到缓存中。
少有改动但频繁使用的字段,如一些系统预制字段,可以将这些字段写入xml配置文件存入缓存,当文件更新时同步更新文件内容到缓存中。
1、配置的xml字段如下
<?xml version="1.0" encoding="UTF-8"?>
<!-- 一个测试xml文件 -->
<root>
<field>
<!-- 字段名称 -->
<name>小猫</name>
<!-- 字段值 -->
<value>cat</value>
</field>
<field>
<name>小狗</name>
<value>dog</value>
</field>
<field>
<name>小猪</name>
<value>pig</value>
</field>
</root>
2、解析xml字段
/**
* 解析xml文件
* @param file
* @return
*/
public static List<Map<String, Object>> xmlFileToList(File file) {
List<Map<String, Object>> rsList = new ArrayList<Map<String, Object>>();
try {
SAXReader reader = new SAXReader();
Document doc = reader.read(file);
List<Element> list = doc.selectNodes("/root/field");
if (list != null && list.size() > 0) {
Element namEelement = null;
Element valueEelement = null;
Map<String, Object> vo = null;
for (Element field : list) {
namEelement = field.element("name");//字段名称
valueEelement = field.element("value");//字段值
//显示名称 和 值为空就不要
if (namEelement == null
||StringUtils.isBlank(namEelement.getText())
||valueEelement == null
||StringUtils.isBlank(valueEelement.getText()) )
{
continue;
}
vo = new HashMap<String, Object>();
vo.put("name", namEelement.getText());
vo.put("value", valueEelement.getText());
rsList.add(vo);
}
}
} catch (Exception e) {
LOG.error("", e);
}
return rsList;
}
3、缓存的声明
声明存储最新时间戳缓存对象,以及数据存储的缓存对象。
//日志声明,将出错信息保存到日志中
public static Log LOG = LogFactory.getLog(更新缓存.class);
//文件最新时间戳缓存
private static Map<String, Long> updateMap = new HashMap<String, Long>();
//系统预制字段配置信息缓存
private static Map<String, List> configMap = new HashMap<String, List>();
4、主方法
public static void main(String[] args) {
//声明一个列表来存储数据
List<Map<String, Object>> rsList = new ArrayList<Map<String, Object>>();
String key = "testKey";
//从D盘取test.xml文件(自建的)
File file = new File("D:" + File.separator + "test.xml");
//文件存在并且时间戳不一致时
if (file.exists() && (updateMap.get(key) == null)
|| (file.lastModified() != updateMap.get(key).longValue()) )
{
//时间戳放进缓存里面
updateMap.put(key, file.lastModified());
//解析xml文件
rsList = xmlFileToList(file);
}
if (rsList != null && rsList.size() > 0) {
configMap.put(key, rsList);
} else {
rsList = configMap.get(key);
if (rsList == null) {
rsList = new ArrayList<Map<String, Object>>();
}
}
System.out.println(configMap);
}
5、需要用到的依赖,此处利用maven引入。
<dependencies>
<!--xml解析工具-->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.1</version>
</dependency>
<!--日志捕获-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1</version>
</dependency>
<!--StringsUtil工具依赖-->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>
</dependencies>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)