请教 spring boot 读取资源文件改为从文件夹

2022-04-21 22:49:39 +08:00
 wjx0912
springboot 后端工程,功能已经调试完了。

但是资源文件夹 resources 被打包到 jar 里面了,每次改配置要重新编译。

有没有办法优先从文件夹里面读取 resource 文件(如果没有就读 jar 里面的资源文件)

就是这样意思:
java -jar my-admin.jar -custom-resource=/home/userxx/springboo-config/

springboot 有没有现成的配置(不用改代码)

万分感谢
1536 次点击
所在节点    Java
12 条回复
pocketz
2022-04-21 23:27:52 +08:00
我猜这个配置项应该和嵌入的 tomcat 有关,不知道是否提供了相关的设置项
soda8890
2022-04-22 00:10:46 +08:00
可以了解下 springboot 的配置文件读取优先级
jorneyr
2022-04-22 08:10:21 +08:00
可以把 application.yaml, application-<profile>.yaml 放到 jar 所在目录,优先级比 jar 类的配置文件高,可参考 SpringBoot 外部配置、优先级及配置详解 https://zhuanlan.zhihu.com/p/71555677
vishun
2022-04-22 08:41:06 +08:00
这样就会覆盖:`java -jar xxx.jar --spring.config.additional-location=外部目录 /bootstrap.yml`
simonlu9
2022-04-22 09:16:04 +08:00
jar 里面的资源文件是不能以绝对路径读的,参考最近的一个微信支付读取证书的做法就是
private String getCertPath() throws IOException {
ApplicationHome applicationHome = new ApplicationHome(AppApplication.class);
//项目打包成 jar 包所在的根路径
String rootPath = applicationHome.getSource().getParentFile().toString();
String configFilePath = rootPath + "/alipay/alipayCertPublicKey_RSA2.crt";
File configFile = new File(configFilePath);
if (!configFile.exists()) {
InputStream in = this.getClass().getClassLoader().getResourceAsStream("alipay/alipayCertPublicKey_RSA2.crt");
FileUtils.copyInputStreamToFile(Objects.requireNonNull(in, "alipay/alipayCertPublicKey_RSA2.crt 文件找不到"), configFile);

}
return configFile.getAbsolutePath();
}
simonlu9
2022-04-22 09:19:35 +08:00
好像理解错了,如果需要优先读外面的配置,只需要把配置文件放在 jar 的同级目录就可以了,要加上 profile 标识,第二个方法就是直接上配置中心,动态更新
wjx0912
2022-04-22 09:27:39 +08:00
@jorneyr 谢谢。这个可以读 application.yaml, application-<profile>.yaml ,但是读其它通用资源不行(类似的自定义 banner.txt 也不行)

可能意图没有说清楚:
myconfig\
|---application-druid.yml
|---application.yml
|---banner.txt
|---logback.xml
|
+---i18n\
|--------messages.properties
|
+---META-INF\
|--------spring-devtools.properties
|
+---mybatis\
|--------mybatis-config.xml

就是可以优先读取 myconfig 文件夹,如果读不到然后读取 jar 里面的 resource
wjx0912
2022-04-22 09:29:01 +08:00
@vishun 谢谢
wjx0912
2022-04-22 09:30:31 +08:00
@simonlu9 application.yaml, application-<profile>.yaml 可以了,现在想把其它通用资源文件也解决下
fengpan567
2022-04-22 17:33:01 +08:00
spring.config.location
mpi2018
2022-04-26 23:13:40 +08:00
java -Xbootclasspath/a:./myconfig/ -jar my-admin.jar

把当前目录下的 myconfig 目录加入到 classpath ,可以加载到 myconfig 里面的资源文件
wjx0912
2022-04-27 09:14:00 +08:00
@mpi2018 完美答案。感谢~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/848456

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX