Spring Boot如何实现外置profile配置与内置通用配置合并加载?
问题原因
你之前的配置方式会替换Spring Boot默认的配置加载路径,导致内置在jar包resources目录下的通用配置不再被加载,因此只有当外置配置写全所有项时才能正常运行,仅存放profile专属配置时会缺少通用配置项导致异常。
解决方案
方案1:使用追加配置路径参数(推荐)
使用spring.config.additional-location参数替代原来的spring.config.location,该参数不会覆盖默认的配置加载路径,只会额外追加你指定的外置配置源,自动实现内置、外置配置的合并,相同配置项外置优先级更高会覆盖内置值。
调整后Dockerfile的ENTRYPOINT配置如下:
FROM adoptopenjdk/openjdk11:alpine-jre ADD /revise.jar /revise.jar ADD /application.yml /application.yml ENTRYPOINT ["java", "-jar", "/revise.jar", "--spring.config.additional-location=file:/application.yml"]
方案2:显式指定包含内置路径的完整配置加载路径
如果需要继续使用spring.config.location参数,需要将内置的类路径配置源显式加入配置路径中,路径顺序越靠后优先级越高:
ENTRYPOINT ["java", "-jar", "/revise.jar", "--spring.config.location=optional:classpath:/,optional:classpath:/config/,file:/application.yml"]
其中optional:前缀用于避免对应路径不存在时抛出启动异常。
补充说明
- 如果外置配置为特定环境的profile专属配置,建议按Spring Boot约定将文件命名为
application-{profile}.yml(如application-prod.yml),启动时添加--spring.profiles.active={profile}参数,即可自动合并对应profile的内置、外置配置。 - 合并规则遵循Spring Boot默认优先级:外置配置 > 内置jar包配置,profile专属配置 > 通用配置。
内容的提问来源于stack exchange,提问作者Alex Zhulin
相关产品推荐
相关产品推荐

