我正在尝试使用Maven 3在Spring Boot应用程序中设置一个活动配置文件。
在我的pom.xml中,我设置默认活动profip 和属性 spring.profiles.active to 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配置文件设置为默认(read application.properties而不是应用程序development.properties)
我该怎么办才能使用Maven配置文件设置Springboot活动配置文件?
高度赞赏的任何帮助。
maven配置文件和弹簧配置文件是两个完全不同的东西。您的pom.xml定义了spring.profiles.active
变量,该变量可在构建过程中可用,但在运行时不可用。这就是为什么只激活默认配置文件的原因。
如何使用Spring绑定Maven配置文件?
您需要将构建变量传递给您的应用程序,以便在启动时可用。
-
在您的
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配置文件中定义的变量代替。
有关更多详细信息,您可以转到我描述此用例的帖子。
或更容易:
mvn spring-boot:run -Dspring-boot.run.profiles={profile_name}
有多种为您的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
您可以使用以下命令运行。在这里,我想使用春季配置文件local
:
spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=local"
在开发中,激活特定的Maven配置文件时,激活Spring引导轮廓。您应该在Maven配置文件中使用Spring-Boot-Maven-Plugin的profiles
属性,例如:
<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
,所以...
这种配置是有意义的,就像您依赖于执行某些任务或重视某些事情的my.active.spring.profiles
属性的通用Maven配置文件一样。
例如,我以这种方式配置了包装应用程序的通用Maven配置文件并构建针对所选环境的Docker映像。
您应该使用 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>
我想在不同环境中运行自动化测试。
因此,我将其添加到命令maven命令:
spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=productionEnv1"
这是我找到解决方案的链接:[1] https://github.com/spring-projects/spring-boot/issues/1095
我想澄清出色的答案https://stackoverflow.com/a/a/42391322/13134499,如果您只想将其用于测试。
如何用Spring绑定Maven配置文件 tests ?
- 与您一样,定义
pom.xml
中的变量
...
<properties>
<spring.profiles.active>development</spring.profiles.active>
</properties>
- 在
src/test/resources
中的application-test.properties
中定义一个占位符:
spring.profiles.active=@spring.profiles.active@
- 启用您的
pom.xml
中的资源过滤:
<build>
...
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
</testResource>
<testResources>
</build>
文件结构:
/src/main/resources
=&gt;
application.properties:
spring.profiles.active:@spring.profiles.active@'
application-dev.properties
application-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
我在第一行中添加了它
spring.profiles.active=@spring.profiles.active@
server.port=9898