为什么Spring Boot的资源优先级忽略了我的外部属性文件?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么Spring Boot的资源优先级忽略了我的外部属性文件?相关的知识,希望对你有一定的参考价值。
作为Spring Boot项目的一部分,我需要加载某些属性文件,默认情况下,该文件位于de src/main/resources
目录下。此外,我需要能够加载外部属性文件(位于项目的根目录)。如果存在此外部文件,则应将文件路径作为命令行属性传递。
文件结构如下:
/app_project
Net.properties (external file)
/src
/main
/resources
Net.properties (default file)
问题是,除非将外部文件的内容复制/覆盖到/resources
目录下的文件中,否则使用这些属性的依赖项将无法工作。
更新
到目前为止,我已经尝试过:
- 将文件作为外部资源加载并将其加载到Properties对象中(https://docs.oracle.com/javase/7/docs/api/java/util/Properties.html)
- 将属性保存为系统属性
- 修改资源处理程序以通过覆盖
addResourceHandlers()
来包含该位置来查看其他目录 - 使用
-cp argument
明确地在CLASSPATH中包含文件的位置(建议使用@veysiertekin) - 将其作为@PropertySource加载(由@Nikolay Shevchenko提供)
- 使用
spring.config.location
覆盖Spring Boot的配置位置(由@gWombat建议)
使用我尝试过的所有这些方法,文件确实已经读取并加载了,但是在某些时候,应用程序每次都会在src/main/resources
下使用该文件。
我怀疑它可能与文件的优先级有关(如https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html所述),但我无法弄清楚发生了什么。
在此先感谢您的帮助。
试试smth就好
@PropertySources({
@PropertySource(name = "default", value = "classpath:default.properties"),
@PropertySource(name = "external", value = "classpath:external.properties", ignoreResourceNotFound = true)
})
public class YourSpringBootApplication {
...
}
基于official doc,您可以尝试使用propertyspring.config.additional-location
添加其他配置文件,或使用spring.config.location
覆盖默认文件位置。
您应该将这些属性作为程序参数传递,以便Spring可以在应用程序启动时使用它们。
当spring-boot项目运行时,它会检查构建的jar文件下的文件。在运行应用程序之前,需要将外部文件添加到类路径:
java -cp 'path-to/spring-boot-application.jar:Net.properties' test.SpringBootApplicationMain
以上是关于为什么Spring Boot的资源优先级忽略了我的外部属性文件?的主要内容,如果未能解决你的问题,请参考以下文章
spring boot 整合security 4 怎么设置忽略的静态资源