【SpringBoot】SpringBoot项目打成jar后加载外部配置文件
迪丽瓦拉
2025-05-28 06:51:27
0次

我们在开发中老是会出现频繁修改springboot项目中的配置文件,每次都要重新打包,重新验证,重新部署,有没有一劳永逸的方式,肯定是有的,搞起。

一、application.properties外置

大部分的配置信息,我们都是配置在application.properties。

首先在application.preperties定义一个属性:

demo.name = hello.01

在Controller进行使用:

@Value("${demo.name}")
private String demoName;@RequestMapping("/test")
public String test(){return this.demoName;
}

将项目打成jar包,使用java -jar的方式进行启动:

java -jar springboot-out-properties-0.0.1-SNAPSHOT.jar

此时读取的值是:hello.01。

将项目中的application.properties拷贝出来,放到和jar包同路径下,修改属性值为:

demo.name = hello.02

然后使用上面的命令重新启动,看下效果读取的值就是hello.02了,jar包同路径下就直接读取了。

如果我们在jar下新建一个config,然后把application.properties放进去的话,使用上面的命令也是可以识别的。

SpringApplication 将从 application.properties 以下位置的文件中加载属性并且将其添加到 Spring 的环境当中:

  • 当前目录下的 /config 子目录
  • 当前目录
  • classpath中的 /config 目录
  • classpath根目录

如果自定义的目录,比如conf的话,这个时候就不能识别了,但可以使用–spring.config.location进行指定路径,执行命令如下:

java -jar springboot-out-properties-0.0.1-SNAPSHOT.jar--spring.config.location=conf/application.properties

当然也可以使用绝对路径进行指定:

java -jar springboot-out-properties-0.0.1-SNAPSHOT.jar--spring.config.location=/Users/linxiangxian/Downloads/conf/application.properties

二、@PropertySource外置

在项目中,有些配置会自定义propreties文件进行使用,比如定义了demo.properties:

demo.nickname = hello.10
demo.weixin = springboot

使用@PropertySource指定配置文件:

@Configuration
@ConfigurationProperties(prefix = "demo")
@PropertySource(value = {"classpath:demo.properties"})
public class DemoProperties {private String nickname;private String weixin;public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public String getWeixin() {return weixin;}public void setWeixin(String weixin) {this.weixin = weixin;}@Overridepublic String toString() {return "DemoProperties{" +"nickname='" + nickname + '\'' +", weixin='" + weixin + '\'' +'}';}
}

那么此时是可以访问到这个配置文件的,打成jar包,执行命令:

java -jar springboot-out-properties-0.0.1-SNAPSHOT.jar

此时返回的值是:hello.10

将demo.properties放到和jar包同路径下,修改demo.name的值为hello.11,执行上面的命令,,结果还是hello.10,说明Spring Boot对于自定义的properties文件并不能自己从外部去寻找。

方案:@PropertySource支持多配置多个路径,可以这么配置:

@PropertySource(value = {"classpath:demo.properties","file:./demo.properties"},ignoreResourceNotFound = true)

当我们配置多路径,且多路径下配置文件都存在时,SpringBoot会都加载且会覆盖相同内容。所以当我们配置信息只区分外部和内部路径、内容完全相同时,将file路径写在后面就可以了。当我们本地启动时,因为不存在file路径,所以会加载classpath;当jar启动时,file路径会覆盖classpath路径下的内容;

ignoreResourceNotFound = true 一定要加上,否则找不到会报错。加上之后会忽略找不到的配置文件。

此时将配置文件demo.properties放到和jar包同级下就可以了。

相关内容

热门资讯

“床车大军”只蹭厕所不住房,酒... ▲资料图:新能源汽车在某充换电站充电。多功能配置让新能源汽车成了可供休息的“床车”。图/新华社“自驾...
家国同框 | 假期里的韩家窝村 10月5日清晨,来到韩家窝村,此村坐落于淄博周村南郊镇,墨水河畔,三面环山,是省级传统古村落,国家3...
假期余额不足 成都市民近郊游享... 10月6日,距离国庆假期结束仅剩一天。成都阳光普照,在百仁公园里,草坪上满是天幕与帐篷。市民们在城区...
散客占比近八成,九寨沟迈入“散... 封面新闻记者 杨金祝九寨沟景区正进入散客时代。10月6日,记者从九寨沟景区获悉,国庆假期,九寨沟迎来...
黄金周 中国游 | “便利政策... 央视网消息:上海正全力打造“中国入境游第一站”,并推动入境游从赏景购物转向深度体验。在上海,外国游客...
通讯|布哈拉全城都知道中国放长...   新华社塔什干10月6日电 通讯|布哈拉全城都知道中国放长假了——探访中亚跨境旅游热  新华社记者...
奔县游|美食好物:小城烟火藏文...   眼下,以沉浸式、慢体验、近短途为特点的“奔县游”持续升温。地处江淮分水岭的安徽省来安县,立足半山...
专访丨约旦多措并举吸引中国游客... 新华社安曼10月6日电 专访|约旦多措并举吸引中国游客——访约旦旅游和文物大臣希贾津新华社记者何奕萍...
国庆别去外滩了,长宁才是隐藏款 国庆的上海,外滩是人山人海。但真正好逛的地方,不仅仅在最热闹的地界。长宁区延安西路1262号,上生·...
大渡河畔红色地标引游客 标题:赓续长征精神 奋进复兴征程|大渡河畔红色地标引游客国庆假期,各地游客来到位于四川省雅安市石棉县...