到目前为止,我在~/.bash_profile
:
export SPRING_PROFILES_ACTIVE=local
这设置了我的活跃弹簧配置文件。但现在,我想将本地个人资料添加到application.properties
中定义的其他个人资料中,而不是替换。
在Spring Boot documentation中,有一个关于添加活动配置文件的部分,但我没有看到从环境变量添加活动配置文件。
我尝试设置SPRING_PROFILES_INCLUDE
环境变量,但这没有效果。
怎么做?
P.S。:我正在使用Spring Boot 1.4.2。
答案 0 :(得分:8)
使用默认添加个人资料
您可以使用表达式在application.properties
文件中,在定义的配置文件旁边引入您自己的环境变量。例如,如果您当前的文件如下所示:
spring.profiles.active=profile1,profile2
使用自定义环境变量,它将变为:
spring.profiles.active=profile1,profile2,${ADDITIONAL_APP_PROFILES:local}
其中ADDITIONAL_APP_PROFILES
是您设置的环境变量的名称,而不是SPRING_PROFILES_ACTIVE
。
当在当前环境中未设置变量时,将使用值local
。在这种情况下,将激活名为local
的配置文件。如果您未设置默认值且环境变量不存在,则整个表达式将用作活动配置文件的名称。
没有默认添加个人资料
如果您想避免激活默认配置文件,可以在变量表达式之前删除占位符值和逗号:
spring.profiles.active=profile1,profile2${ADDITIONAL_APP_PROFILES}
但在这种情况下,在当前环境中设置的变量必须以逗号开头:
export ADDITIONAL_APP_PROFILES=,local
答案 1 :(得分:2)
您链接到的文档中的下一句话:
有时,将特定于配置文件的属性添加到活动配置文件而不是替换它们是有用的。
spring.profiles.include
属性可用于无条件添加活动配置文件。
因此,您可以使用命令行参数启动应用程序:
-Dspring.profiles.include=${SPRING_PROFILES_INCLUDE}
答案 2 :(得分:0)
这是从系统env或jvm arg 添加以编程方式添加的活动配置文件的示例。
@Configuration
public class ApplicationInitializer implements WebApplicationInitializer, ApplicationContextInitializer<ConfigurableWebApplicationContext> {
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.setInitParameter("contextInitializerClasses", this.getClass().getCanonicalName());
}
@Override
public void initialize(ConfigurableWebApplicationContext applicationContext) {
ConfigurableEnvironment environment = applicationContext.getEnvironment();
environment.addActiveProfile(System.getProperty("myProperty"));
environment.addActiveProfile(System.getEnv("myProperty"));
}
}
答案 3 :(得分:-1)
为了支持bash环境,可用值为 SPRING_PROFILES_ACTIVE 和 SPRING_PROFILES_DEFAULT
不是,SPRING_PROFILES_INCLUDE
您可能必须采用命令行方式-Dspring.profiles.include或使用ConfigurableEnvironment进行语法练习