我需要访问项目位置以外的application.properties文件。我可以使用以下方法实现同样的目标:
@Component
@PropertySources({
@PropertySource(value = "file:${user.home}/file/path/application.properties", ignoreResourceNotFound = false) })
public class PropConfig implements InitializingBean {现在,我希望使用active profile实现相同的目标。如果dev配置文件是活动的,我需要获取application-dev.properties,如果stage配置文件是活动的,则需要获取application-stage.properties等等。
我使用的是Windows平台和带有SpringBoot1.5.x的JAVA 8
我尝试在application.properties文件中设置活动配置文件。但这不管用
spring.profiles.active=dev发布于 2019-07-04 23:50:02
SpringBoot1.5.X的解决方案
通过使用以下JVM参数运行应用程序,可以将文件夹添加为自定义配置位置:
-Dspring.config.location=file:${user.home}/file/path/配置了这个JVM参数后,这个文件夹中的所有application-{profile}.properties文件都将被自动解析。
(或者,如果您喜欢使用环境变量而不是JVM参数,您可以通过设置SPRING_CONFIG_LOCATION环境变量来做同样的事情,例如在linux终端中使用以下命令:export SPRING_CONFIG_LOCATION=file:${user.home}/file/path/ )
现在,如果您的自定义配置文件夹中有一个文件application-dev.properties,应该可以通过添加以下内容来激活默认application.properties文件中的配置文件:
spring.profiles.active=dev最后,@PropertySources注释是多余的,您可以删除它:
@Component
public class PropConfig implements InitializingBean {SpringBoot2.x的解决方案
这种方法主要与SpringBoot1.5.X相同,但略有不同。
在SpringBoot2.x中,spring.config.location参数的行为与早期版本略有不同。区别在于,在SpringBoot2.x中,spring.config.location参数覆盖默认配置位置:
当使用spring.config.location配置自定义配置位置时,它们将替换默认位置。(资料来源:弹簧启动文件)
由于将此参数设置为自定义配置文件夹将覆盖默认位置(我认为丢失默认配置位置上的配置文件不是所希望的行为),所以最好使用新的spring.config.additional-location参数,它不覆盖但只扩展默认位置:
-Dspring.config.additional-location=file:${user.home}/file/path/(或者,如果您喜欢使用环境变量而不是JVM参数,则可以使用SPRING_CONFIG_SPRING环境变量)
参考资料:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
发布于 2019-07-04 13:29:07
请您尝试使用JVM参数设置活动配置文件,如下所示- -Dspring.profiles.active=dev
如果您的需求是限制特定bean在环境中使用,那么可以使用@Profile("dev")注释。
此引用可能会帮助您-> https://www.baeldung.com/spring-profiles
https://stackoverflow.com/questions/56888575
复制相似问题