从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>
posted @   晴天阴天下雨天  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示