我的主要用例是将配置属性拆分为多个文件以避免出现巨大的application.properties
文件。这些多个属性文件不一定来自模块 jar,但这当然是可能的。实际上,可以使用不同的属性文件以逻辑方式对配置属性进行分组。
在 Sprig Boot 2.3 中,我通过如下方法解决了这个问题:
@PropertySource(
ignoreResourceNotFound = true,
value = { "classpath:config/authentication.properties",
"classpath:config/authentication-${spring.profiles.active}.properties",
"classpath:config/persistence.properties",
"classpath:config/persistence-${spring.profiles.active}.properties" })
也就是说,由于PropertySource
s 不了解配置文件(请参阅#12822,该提案已被拒绝),我不得不模仿该机制,将其设置ignoreResourceNotFound
为true
。
spring.config.import
现在使用 Spring Boot 2.4,我可能可以直接用(我还没有尝试过)做类似的事情,但是我必须再次“模仿”Spring Boot 保留的配置文件特定行为application.properties
,以及application.properties
捆绑 JAR 之外的文件优先于 JAR 内部文件的其他机制。
那么像这样的事情怎么样:
spring.config.units=authentication,persistence
它的作用如下:
authentication[-*].properties
使用与搜索相同的算法进行搜索application.properties
(包括对 JAR 之外的配置文件和路径的支持)
persistence[-*].properties
使用与搜索相同的算法进行搜索application.properties
(包括对 JAR 之外的配置文件和路径的支持)
- 关于顺序,使
application.properties[-*].properties
导入的单元获胜(这应该涵盖“从模块 JAR 导入默认属性”的情况)
- 在导入的单元中,保留其声明的顺序(即:使
authentication[-*].properties
获胜persistence[-*].properties
)
仅我的观点。