spring boot jar包外置配置文件解决方案

博主遇到SpringBoot项目配置文件加载优先级问题,尝试多种方式让系统使用外部配置文件未果,最终通过命令行替换jar包内配置文件实现。文章详细记录了解决过程,包括使用jar命令动态替换jar包中的配置文件,以及对于war包的类似处理方法。
摘要由CSDN通过智能技术生成

为什么要搞个解决方案呢?按照网上教程,spring boot项目中,配置文件有优先级,其中,放在根目录下的config文件夹中优先级最高;根目录下次之;然后是resources/config/;resources/下优先级最低。而加载顺序刚好反过来,resources/下最先加载,而/config/最后加载。然后在命令行方式下,指定一下这个配置文件的路径,就可以了,云云。

也许事实就是如此的吧,但我试来试去,总不成功,系统死活都要读resources/下,这个优先级最低的配置文件。

这对于用 jar包 方式运行的项目来说,就很痛苦了。每次部署的时候,都要将里面的配置文件替换,非常繁琐。我不知道为什么我的JAR包用不了外置配置文件,也许是代码里含有

@PropertySource(value = "classpath:myconfig.properties",encoding = "UTF-8")

这样的语句;

又或许是含有

@Scheduled(cron = "${ins.ship-interval}")

这样的语句。说起来也是心累,搞不清这里面的加载顺序。

一时之间没法解决,所以先换一种方式,每次运行系统前,用jar命令,将相应的配置文件替换jar包里的。

命令如下:

#将当前目录下 BOOT-INF/classes/application.properties 替换 jar包里 BOOT-INF/classes/application.properties
#这个命令也是醉了,为啥源文件与目标文件路径要一致呢,可能是为了简单吧
jar uf spider-0.0.1-SNAPSHOT.jar BOOT-INF/classes/application.properties

#好了,可以放心运行了
java -jar spider-0.0.1-SNAPSHOT.jar

简单粗暴,但还可以用。


2020.18

war是一种特殊的jar包。可以类似处理。即将发布的war包拷贝到服务器,然后替换里面的各种配置文件,然后再扔到tomcat下。
在这里插入图片描述
其中WEB-INF里面是各种服务器的配置文件。install.bat内容如下:

@echo off
title 更新大闹天宫WEB程序
echo.
echo|set /p="正在替换war包里的配置文件..."
jar uf shj.war WEB-INF
echo OK!
echo.
echo 正在拷贝war包到tomcat...
echo.
xcopy shj.war C:\apache-tomcat-8.5.27\webapps /y /q
echo.
echo.
echo 更新完毕
echo.
pause

2024.03.19
现在看起来,也许说的根目录,不是指jar包里面的根目录,而是指jar包所在的目录。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值