spring booot 外部文件加载

  1. 场景

    有一个项目需要加载一个自定义的xml文件。正常情况下,我们把资源文件放到src/main/resources目录下。这样就有一个问题,这里面的资源文件会被一起打包到jar里面。  

    如果只是spring本身的文件还好说,因为spring boot会加载jar同级目录以及与jar同级的conf目录下的application*.properties文件。而我们的xml文件,不是spring加载的,是我们自己写的解析。  

    这样发布后,只能从classpath加载,也就是jar包本身里面。现在要求实现类spring这种方式来加载。

    先通过下图看看原来的加载方式,直接中classpath中加载,代码量极少。

    spring boot应用加载外部自定义资源文件
    spring boot应用加载外部自定义资源文件
  2.  

    方案

    首先我们可以获取到jar本身路径,然后直接从jar路径找xml文件,找不到的时候在找同级的conf目录,还是没有的话,再使用classpath下的xml文件。 这样就可以把配置文件放到jar的外面了。以后有修改,就不需要在重新打包了。

    加载资源文件的代码如下:

    File file = new File("client-system.xml") // 这里表示从jar同级目录加载

     

    if (!file.exists()) { // 如果同级目录没有,则去config下面找

        file = new File("config/client-system.xml");

    }

    Resource resource = new FileSystemResource(file);

    if (!resource.exists()) { //config目录下还是找不到,那就直接用classpath下的

        resource = resourceLoader.getResource("classpath:client-system.xml");

    }

    SAXReader reader = new SAXReader();

    Document doc = reader.read(resource.getInputStream());

    //.....到此资源文件就可以从三个预选路径中加载了

    //.....省略后面的对xml操作等代码

     

     

    最后配置文件可以如下图方式存放,client-system.xml就是我们的自定义配置文件,

    spring boot应用加载外部自定义资源文件
    spring boot应用加载外部自定义资源文件
  3.  

    编写测试

    在加载xml文件的地方加入了打印输出,为了方便直观没有用Logger了,直接使用System.out.println了。代码如下:

    spring boot应用加载外部自定义资源文件
  4.  

    运行jar包

    通过java -jar 来运行打好的jar文件。再看日志输出,与左边的文件进行对比。

    第一种方式将xml和资源文件放到jar同级目录;

    第二方式将xml放到jar同级的config目录;

    第三种方式就是默认方式,从jar内部加载。

    每种方式的输出结果请留意控制台中的高亮部分。

    spring boot应用加载外部自定义资源文件
    spring boot应用加载外部自定义资源文件
    spring boot应用加载外部自定义资源文件
    spring boot应用加载外部自定义资源文件
    spring boot应用加载外部自定义资源文件
    END
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值