如果没有设置-Dspring.profiles.active
,我希望我的默认活动配置文件是production
。
我在我的application.properties
中尝试了以下内容,但它没有起作用:
spring.profiles.default=production
Spring-boot 版本 = 1.3.5.RELEASE
如果没有设置-Dspring.profiles.active
,我希望我的默认活动配置文件是production
。
我在我的application.properties
中尝试了以下内容,但它没有起作用:
spring.profiles.default=production
Spring-boot 版本 = 1.3.5.RELEASE
您在此处所做的是设置默认的默认配置文件(如果您不指定@Profile
注释,则该配置文件将用于任何bean)为production
。
您实际需要做的是设置默认的活动配置文件,方法如下:
spring.profiles.active=production
添加--spring.profiles.active=production
示例:
java -jar file.jar --spring.profiles.active=production
java -jar file.jar -Dspring.profiles.active=production
,但对我无效。 - Valentin Grégoireapplication.properties
文件。因此,其它配置文件仅会补充和替换之前定义过的属性。application.properties
application-qa.properties
application-prod.properties
1)非常重要。 application.properties
文件,只有这个文件,必须有以下行:
spring.profiles.active=@spring.profiles.active@
2) 修改QA和PROD配置文件中想要更改的内容,以查看环境之间的区别。
3) 通过命令行,使用以下任何选项启动spring boot应用程序:
它将使用默认的application.properties
文件启动应用程序:
mvn spring-boot:run
它将加载默认的application.properties
文件,然后加载application-qa.properties
文件,替换和/或补充默认配置。mvn spring-boot:run -Dspring.profiles.active=qa
同样的情况,只不过使用生产环境而不是QA:
mvn spring-boot:run -Dspring.profiles.active=prod
在设置 Java 的 spring.profiles.active
时,我们也遇到了类似的问题。
在尝试四种不同的提供 spring.profiles.active
的方式后,最终我们弄明白了以下内容。
在 Java-8
中:
$ java --spring.profiles.active=dev -jar my-service.jar
Gives unrecognized --spring.profiles.active option.
$ java -jar my-service.jar --spring.profiles.active=dev
# This works fine
$ java -Dspring.profiles.active=dev -jar my-service.jar
# This works fine
$ java -jar my-service.jar -Dspring.profiles.active=dev
# This doesn't works
Java 11
中,$ java --spring.profiles.active=dev -jar my-service.jar
Gives unrecognized --spring.profiles.active option.
$ java -jar my-service.jar --spring.profiles.active=dev
# This doesn't works
$ java -Dspring.profiles.active=dev -jar my-service.jar
# This works fine
$ java -jar my-service.jar -Dspring.profiles.active=dev
# This doesn't works
注意: 如果您在application.properties
文件中指定了 spring.profiles.active
参数,则需要按照上述提到的方法相应地提供spring.config.location
或spring.config.additional-location
选项给java。
<properties>
<activeProfile>production</activeProfile>
</properties>
作为其他个人资料的示例:
<profiles>
<!--Your default profile... selected if none specified-->
<profile>
<id>production</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<activeProfile>production</activeProfile>
</properties>
</profile>
<!--Profile 2-->
<profile>
<id>development</id>
<properties>
<activeProfile>development</activeProfile>
</properties>
</profile>
<!--Profile 3-->
<profile>
<id>otherprofile</id>
<properties>
<activeProfile>otherprofile</activeProfile>
</properties>
</profile>
<profiles>
在您的application.properties文件中,您需要进行以下设置:
spring.profiles.active=@activeProfile@
每次这种方法都能解决我的问题,希望它也能解决你的问题。
maven package -P{配置文件名称}
命令,例如,对于基于生产环境的配置文件,请使用maven package -Pproduction
。 - Artegon我用这种方式来做
System.setProperty("spring.profiles.default", "dev");
在main(...)
函数的最开始
org.springframework.core.env.AbstractEnvironment.DEFAULT_PROFILES_PROPERTY_NAME
,而不是它的值。 - Ilya Serbispublic static void main(String[] args) throws UnknownHostException {
SpringApplication app = new SpringApplication(App.class);
SimpleCommandLinePropertySource source = new SimpleCommandLinePropertySource(args);
if (!source.containsProperty("spring.profiles.active") &&
!System.getenv().containsKey("SPRING_PROFILES_ACTIVE")) {
app.setAdditionalProfiles("production");
}
...
}
这就是在JHipster中的实现方法。
如果您正在使用AWS Lambda和SprintBoot,则必须在环境变量下声明以下内容:
键:JAVA_TOOL_OPTIONS & 值:-Dspring.profiles.active=dev
在不改变源代码的情况下,实现这一点的简洁方法是使用操作系统环境变量SPRING_PROFILES_ACTIVE
:
export SPRING_PROFILES_ACTIVE=production
spring:
profiles:
active: production
-Dspring.profiles.active=development
覆盖了它,这正是我想要的。 - DarVar