通过Maven在Springboot中配置活动配置文件



我正在尝试使用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配置文件?

您需要将构建变量传递给您的应用程序,以便在启动时可用。

  1. 在您的application.properties中定义一个占位符:

    spring.profiles.active=@spring.profiles.active@
    

    @spring.profiles.active@变量必须匹配Maven配置文件中声明的属性。

  2. 启用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应用程序设置配置文件的方法。

  1. 您可以在属性文件中添加它:

    spring.profiles.active=dev
    
  2. 编程方式:

    SpringApplication.setAdditionalProfiles("dev");
    
  3. 测试使指定哪些配置文件是活动

    非常容易
    @ActiveProfiles("dev")
    
  4. 在UNIX环境中

    export spring_profiles_active=dev
    
  5. 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

  1. 与您一样,定义pom.xml中的变量
...
<properties>
  <spring.profiles.active>development</spring.profiles.active>
</properties>
  1. src/test/resources中的application-test.properties中定义一个占位符:
spring.profiles.active=@spring.profiles.active@
  1. 启用您的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

最新更新