SpringBoot:加载和读取jar包外面的资源文件

编程入门 行业动态 更新时间:2024-10-28 04:25:37

SpringBoot:<a href=https://www.elefans.com/category/jswz/34/1771433.html style=加载和读取jar包外面的资源文件"/>

SpringBoot:加载和读取jar包外面的资源文件

1. 声明

当前内容主要为本人记录使用springboot在webmvc程序且打包成jar后时加载外部配置文件的记录(提供从外部修改程序的机会),主要参考官方文档

主要问题:

  1. web程序加载配置文件分为jar中的配置文件和jar外面的配置文件
  2. 修改jar中的配置文件需要使用压缩包方式打开并复制修改后的配置文件进入jar中(需要外部配置和内部配置替换)
  3. springboot打包后只支持带jar外部的config中的application.properties的加载(通过外部文件控制启动行为),对于其他配置文件不能加载

2. 解决方式

使用FileSystemResource类加载资源文件
原因:在使用springboot的插件打成jar包后,此时启动路径与idea中的路径发生变化,资源文件描述发生变化,但是user.dir并没有发生变化

而FileSystemResouce本来就是相对于启动路劲来寻找文件的

3. 测试

1. 创建一个简单的springboot项目并提供一个加载文件的api接口

@RequestMapping(value = "/loadWebResource", method = RequestMethod.GET)
public String loadWebResource(HttpServletRequest request, String fileName) {// 相对工作目录下面即user.dirFileSystemResource fileSystemResource = new FileSystemResource(fileName);File file = fileSystemResource.getFile();String absolutePath = file.getAbsolutePath();System.out.println("fileName:" + fileName + ",absolutePath:" + absolutePath);if (file.exists()) {try (BufferedReader newBufferedReader = Files.newBufferedReader(file.toPath());) {String readLine = null;while ((readLine = newBufferedReader.readLine()) != null) {System.out.println(readLine);}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return "ok";
}

将程序打成jar包,然后部署后访问

http://localhost:8086/loadWebResource?fileName=nimbus.log加载jar同级目录下的资源文间

http://localhost:8086/loadWebResource?fileName=config/nimbus.log加载jar同级的config文件夹中的文件

4.思考

1.虽然使用该方式可以在jar外部加载配置文件,但是在注入配置文件的时候还是需要额外的配置操作,由于是使用springboot-maven方式打包

2.可以考虑将资源配置文件直接加载到springboot的env中(这个还是需要判断当前的运行环境:是jar或者非jar)

5. 加载配置文件

1. 加载jar中的配置文件

// 在具有@Configuration的类中使用
@PropertySource(value= {"bean.properties"})
@EnableConfigurationProperties(value= {BeanProperties.class})
@ConfigurationProperties(prefix = "bean")
public class BeanProperties {private String configName;// 省略get\set
}

启动的时候发现默认就是加载classpath(jar)中的文件,如果该bean.properties文件不存在则报错

2. 修改为加载jar同级的配置文件(只需要修改一个部分)

@PropertySource(value= {"file:bean.properties"})

file:bean.properties此时会使用FileSystemResource,就会加载jar同级的配置文件

所以控制文件加载实际上就只需要一个控制就可以了

更多推荐

SpringBoot:加载和读取jar包外面的资源文件

本文发布于:2024-02-26 05:02:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1701432.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:加载   文件   资源   SpringBoot   jar

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!