spring boot应用加载外部自定义资源文件
spring boot是spring的一个新项目,主要帮助开发者方便快速的创建spring应用。spring boot应用一般有两种部署形式,一种是jar包,一种是war包。作为新时代的开发者,当然喜欢用jar形式部署web应用了。那么当通过maven工具将spring boot应用打成jar包后,资源文件也一起被打包了,我们又怎样去方便的修改配置呢?
工具/原料
spring boot
场景/方案/测试
1、场景有一个项目需要加载一个自定义的xml文件。正常情况下,我们把资源文件放到src/main/resources目录下。这样就有一个问题,这里面的资源文件会被一起打包到jar里面。 如果只是spring本身的文件还好说,因为spring boot会加载jar同级目录以及与jar同级的conf目录下的application*.properties文件。而我们的xml文件,不是spring加载的,是我们自己写的解析。 这样发布后,只能从classpath加载,也就是jar包本身里面。现在要求实现类spring这种方式来加载。先通过下图看看原来的加载方式,直接中classpath中加载,代码量极少。
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就是我们的自定义配置文件,
3、编写测试在加载xml文件的地方加入了打印输出,为了方便直观没有用Logger了,直接使用System.out.println了。代码如下:
4、运行jar包通过java -jar 来运行打好的jar文件。再看日志输出,与左边的文件进行对比。第一种方式将xml和资源文件放到jar同级目录;第二方式将xml放到jar同级的config目录;第三种方式就是默认方式,从jar内部加载。每种方式的输出结果请留意控制台中的高亮部分。