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.dir
	FileSystemResource 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 block
			e.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同级的配置文件

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值