Spring项目中对XML文件热加载代码实现

本文介绍了在Spring项目中如何实现XML配置文件的热加载,包括实现思路:继承XmlWebApplicationContext,创建保存文件修改时间的类,设计无缓存导入类NoCacheClassPathResource,并在ApplicationContext中定义探测线程。
摘要由CSDN通过智能技术生成

前言:

平时我们进行Spring项目开发的时候,经常需要因为XML的改变而重启服务器,假如项目较大的时候,重启将会非常耗时。最近编写的webschool框架需要用到较多的XML文件进行配置,在这里参考公司代码,实现了对XML文件的热加载。

效果

每次修改xml文件后,Spring都会对xml进行重新读取,自动覆盖原来的bean。

实现思路:
在Spring中建立一个线程不断监控我们导入的xml文件是否已修改,一旦修改,马上重载。

继承扩展XmlWebApplicationContext类

/**
 * declaration: 
 *      扩展Xbean包中的XmlWebApplication类,使之支持热加载。
 *
 * author wenkangqiang
 * date   2016年3月5日
 */
public class XmlRefreshWebApplicationContext extends XmlWebApplicationContext {
   

    public static final String CONFIG_LOCATION_PARAM = "contextConfigLocation";
    private static String springClassPathPrefix = "classpath:";

    public void reload() {
        //重新获得web.xml文件中"contextConfigLocation"参数(被加载的bean目录)
        String location = this.getServletContext().getInitParameter(
                CONFIG_LOCATION_PARAM);
        //通过特定的符号,;\n对参数进行分割,得出各个的路径
        String[] locations = StringUtils.tokenizeToStringArray(location,
                CONFIG_LOCATION_DELIMITERS);
        //获得被修改过的location,然后往下再重新加载那些被修改过的xml文件
        List<String> moidifiedLocationList = getModifiedLocation(locations);
        if (moidifiedLocationList != null && moidifiedLocationList.size() != 0) {
            this.setConfigLocations(StringUtils
                    .toStringArray(moidifiedLocationList));
            doRefresh();
        }
    }

    /**
     * 鉴定资源文件(*.xml)是否已经发生更改
     * @param locations
     * @return
     */
    public List<String> getModifiedLocation(String[] locations) {
        List<String> refreshLocationList = new ArrayList<Str
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值