通过 Maven 在 SpringBoot 中配置活动配置文件
Posted
技术标签:
【中文标题】通过 Maven 在 SpringBoot 中配置活动配置文件【英文标题】:Configure active profile in SpringBoot via Maven 【发布时间】:2017-07-12 11:09:54 【问题描述】:我正在尝试使用 Maven 3 在 Spring Boot 应用程序中设置活动配置文件。 在我的 pom.xml 中,我将 default active profile 和属性 spring.profiles.active 设置为 development:
<profiles>
<profile>
<id>development</id>
<properties>
<spring.profiles.active>development</spring.profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>
但每次我运行我的应用程序时,我都会在日志中收到以下消息:
No active profile set, falling back to default profiles: default
并且 SpringBoot 配置文件设置为默认值(读取 application.properties 而不是 application-development.properties) 我还应该怎么做才能使用 Maven 配置文件设置我的 SpringBoot 活动配置文件? 任何帮助都非常感谢。
【问题讨论】:
***.com/questions/25420745/… 【参考方案1】:您应该使用 Spring Boot Maven 插件:
<project>
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>1.5.1.RELEASE</version>
<configuration>
<profiles>
<profile>foo</profile>
<profile>bar</profile>
</profiles>
</configuration>
...
</plugin>
...
</plugins>
...
</build>
...
</project>
【讨论】:
更轻松、更快速、更清洁,不会磕头。为我 +1【参考方案2】:Maven 配置文件和 Spring 配置文件是两个完全不同的东西。您的 pom.xml 定义了 spring.profiles.active
变量,该变量在构建过程中可用,但在运行时不可用。这就是为什么只激活默认配置文件的原因。
如何将 Maven 配置文件与 Spring 绑定?
您需要将构建变量传递给您的应用程序,以便它在启动时可用。
在您的application.properties
中定义一个占位符:
spring.profiles.active=@spring.profiles.active@
@spring.profiles.active@
变量必须与 Maven 配置文件中声明的属性匹配。
在 pom.xml 中启用资源过滤:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
…
</build>
执行构建时,src/main/resources
目录中的所有文件都将由 Maven 处理,application.properties
中的占位符将替换为您在 Maven 配置文件中定义的变量。
有关更多详细信息,您可以go to my post 我描述了这个用例。
【讨论】:
有没有办法通过 maven 命令为单元测试启用配置文件?也许你对this question.有一个想法 我只想补充一点,您可以使用 commamd mvn package -P myProfile 设置活动配置文件,其中我的配置文件在 POM 中定义【参考方案3】:您可以使用以下命令运行。这里我想使用spring profilelocal
运行:
spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=local"
【讨论】:
最佳答案!在 mac os 10.13.3 上使用 maven 3.5.2 + java 1.8 + spring-boot-1.5.9.RELEASE 为我工作 我在哪里添加它?【参考方案4】:或者相当容易:
mvn spring-boot:run -Dspring-boot.run.profiles=profile_name
【讨论】:
虽然这没有回答“如何通过 maven 设置 springboot 活动配置文件”的问题,但它给了我“如何设置 springboot:运行活动配置文件”的答案。 使用 Spring2.x,spring.profiles.active 设置不起作用,无论是直接还是通过 jvmArguments。感谢您的回答【参考方案5】:有多种方法可以为您的 springboot 应用程序设置配置文件。
你可以在你的属性文件中添加这个:
spring.profiles.active=dev
程序化方式:
SpringApplication.setAdditionalProfiles("dev");
测试可以很容易地指定哪些配置文件处于活动状态
@ActiveProfiles("dev")
在 Unix 环境中
export spring_profiles_active=dev
JVM系统参数
-Dspring.profiles.active=dev
示例:使用配置文件运行 springboot jar 文件。
java -jar -Dspring.profiles.active=dev application.jar
【讨论】:
>你可以在你的属性文件中添加这个:在哪个属性文件中?因为需要配置文件来获取相应的 application.xxx.properties【参考方案6】:在开发中,当激活特定的 Maven 配置文件时激活 Spring Boot 配置文件是直接的。您应该在 Maven 配置文件中使用 spring-boot-maven-plugin 中的 the profiles
property,例如:
<project>
<...>
<profiles>
<profile>
<id>development</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<profiles>
<profile>development</profile>
</profiles>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profiles>
</...>
</project>
您可以运行以下命令来同时使用 Spring Boot 和 Maven development
配置文件:
mvn spring-boot:run -Pdevelopment
如果您希望能够将任何 Spring Boot 配置文件映射到具有相同配置文件名称的 Maven 配置文件,您可以定义一个 Maven 配置文件并在检测到存在 Maven 属性时启用它。此属性将是您在运行 mvn
命令时需要指定的唯一内容。
配置文件看起来像:
<profile>
<id>spring-profile-active</id>
<activation>
<property>
<name>my.active.spring.profiles</name>
</property>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<profiles>
<profile>$my.active.spring.profiles</profile>
</profiles>
</configuration>
</plugin>
</plugins>
</build>
</profile>
您可以运行以下命令来同时使用 Spring Boot 和 Maven development
配置文件:
mvn spring-boot:run -Dmy.active.spring.profiles=development
或:
mvn spring-boot:run -Dmy.active.spring.profiles=integration
或:
mvn spring-boot:run -Dmy.active.spring.profiles=production
所以……
这种配置很有意义,因为在通用 Maven 配置文件中,您依赖传递的 my.active.spring.profiles
属性来执行某些任务或为某些事情赋值。
例如,我使用这种方式来配置一个通用的 Maven 配置文件,该配置文件将应用程序打包并构建一个特定于所选环境的 docker 映像。
【讨论】:
【参考方案7】:我想在不同的环境中运行自动化测试。 所以我将这个添加到命令 maven 命令中:
spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=productionEnv1"
这是我找到解决方案的链接:[1]https://github.com/spring-projects/spring-boot/issues/1095
【讨论】:
mvn spring-boot:run -Drun:jvmArguments="-Dspring.profiles.active=prod"
--> 当我运行这个时,我仍然得到No active profile set, falling back to default profiles: default
【参考方案8】:
如果您只想将其用于测试,我想澄清 Daniel Olszewski 的出色答案 https://***.com/a/42391322/13134499。
如何将 Maven 配置文件与 Spring 绑定以进行测试?
-
和你一样,在
pom.xml
中定义变量
...
<properties>
<spring.profiles.active>development</spring.profiles.active>
</properties>
-
在
application-test.properties
中的src/test/resources
中定义一个占位符:
spring.profiles.active=@spring.profiles.active@
-
在你
pom.xml
中启用资源过滤:
<build>
...
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
</testResource>
<testResources>
</build>
【讨论】:
【参考方案9】:文件结构:
/src/main/资源
=>
application.properties:
spring.profiles.active:@spring.profiles.active@'
应用程序-dev.properties
应用程序-prod.properties
IDE-Eclipse:
Right click on the project=>Run As=>Run Configuration=>Arguments=>VM Arguments:-Dspring.profiles.active=dev
CMD:
mvn spring-boot:run -Dspring.profiles.active=dev
mvn clean install -Dspring.profiles.active=dev
【讨论】:
以上是关于通过 Maven 在 SpringBoot 中配置活动配置文件的主要内容,如果未能解决你的问题,请参考以下文章
SpringBoot项目打包部署到阿里云服务器通过Maven插件制作Docker镜像部署项目容器配置生产环境