web-dev-qa-db-ja.com

Mavenを介してSpring Bootでアクティブなプロファイルを構成する

Maven 3を使用して、Spring Bootアプリケーションでアクティブなプロファイルを設定しようとしています。
pom.xmlでデフォルトのアクティブプロファイルとプロパティspring.profiles.activedevelopmentに設定します。

<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-development.propertiesではなくapplication.propertiesを読み取ります)

Mavenプロファイルを使用してSpringBootアクティブプロファイルを設定するには、他に何をすればよいですか?
ヘルプは高く評価されています。

25

MavenプロファイルとSpringプロファイルは、まったく異なるものです。 pom.xmlは、ビルドプロセスで使用できますが、実行時ではないspring.profiles.active変数を定義します。そのため、デフォルトのプロファイルのみがアクティブになります。

MavenプロファイルをSpringにバインドする方法は?

ビルド変数をアプリケーションに渡して、起動時に使用できるようにする必要があります。

  1. application.propertiesでプレースホルダーを定義します:

    [email protected]@
    

    @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プロファイルで定義した変数に置き換えられます。

詳細については、 私の投稿に移動 このユースケースについて説明しました。

46

またはかなり簡単に:

mvn spring-boot:run -Dspring-boot.run.profiles={profile_name}
10
Thomas Escolan

次のコマンドを使用して実行できます。ここでは、スプリングプロファイルlocalを使用して実行します。

spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=local"

7
Justin Joseph

開発では、特定のMavenプロファイルがアクティブ化されたときにSpring Bootプロファイルをアクティブ化するのは簡単です。次のようなMavenプロファイルで spring-boot-maven-pluginprofilesプロパティ を使用する必要があります。

<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プロファイルを構成します。

6
davidxxx

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
    
5
Pankaj Jaiswal

Spring Boot Maven Pluginを使用する必要があります。

<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>
5
SaWo