webentwicklung-frage-antwort-db.com.de

Konfigurieren Sie das aktive Profil in Spring Boot über Maven

Ich versuche, ein aktives Profil in der Spring Boot-Anwendung mit Maven 3 festzulegen.
In meiner pom.xml setze ich default active profile und property spring.profiles.active auf development :

<profiles>
    <profile>
        <id>development</id>
        <properties>
            <spring.profiles.active>development</spring.profiles.active>
        </properties>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
    </profile>
</profiles>

bei jeder Ausführung meiner Anwendung erhalte ich jedoch die folgende Meldung in Protokollen:

No active profile set, falling back to default profiles: default

und das SpringBoot-Profil ist auf Standard gesetzt (liest application.properties statt application-development.properties)

Was muss ich noch tun, um mein aktives SpringBoot-Profil mit dem Maven-Profil festzulegen?
.__ Jede Hilfe sehr geschätzt.

15

Das Maven-Profil und das Spring-Profil sind zwei völlig verschiedene Dinge. Ihre pom.xml definiert die spring.profiles.active-Variable, die im Build-Prozess verfügbar ist, jedoch nicht zur Laufzeit. Deshalb ist nur das Standardprofil aktiviert.

Wie binde ich das Maven-Profil mit Spring?

Sie müssen die Build-Variable an Ihre Anwendung übergeben, damit sie beim Start verfügbar ist.

  1. Definieren Sie einen Platzhalter in Ihrem application.properties:

    [email protected]@
    

    Die Variable @[email protected] muss mit der deklarierten Eigenschaft aus dem Maven-Profil übereinstimmen.

  2. Aktivieren Sie die Ressourcenfilterung in Ihrer Datei pom.xml:

    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        …
    </build>
    

    Wenn der Build ausgeführt wird, werden alle Dateien im Verzeichnis src/main/resources von Maven verarbeitet, und der Platzhalter in application.properties wird durch die in Ihrem Maven-Profil definierte Variable ersetzt. 

Für weitere Details können Sie gehen Sie zu meinem Beitrag wo ich diesen Anwendungsfall beschrieben habe.

33

Sie können den folgenden Befehl ausführen. Hier möchte ich mit dem Federprofil local laufen:

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

6
Justin Joseph

Sie sollten das Spring Boot Maven Plugin verwenden :

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

Oder eher leicht:

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

In der Entwicklung ist die Aktivierung eines Spring Boot-Profils, wenn ein bestimmtes Maven-Profil aktiviert ist, direkt. Sie sollten die profiles-Eigenschaft des spring-boot-maven-plugin im Maven-Profil verwenden, z.

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

Sie können den folgenden Befehl ausführen, um sowohl das Spring Boot- als auch das Maven development-Profil zu verwenden:

mvn spring-boot:run -Pdevelopment

Wenn Sie Spring Boot-Profile einem Maven-Profil mit demselben Profilnamen zuordnen möchten, können Sie ein einzelnes Maven-Profil definieren und aktivieren, wenn das Vorhandensein einer Maven-Eigenschaft erkannt wird. Diese Eigenschaft ist die einzige Sache, die Sie angeben müssen, wenn Sie den Befehl mvn ausführen.
Das Profil würde folgendermaßen aussehen:

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

Sie können den folgenden Befehl ausführen, um sowohl das Spring Boot-Profil als auch das Maven development-Profil zu verwenden:

mvn spring-boot:run -Dmy.active.spring.profiles=development

oder :

mvn spring-boot:run -Dmy.active.spring.profiles=integration

oder :

 mvn spring-boot:run -Dmy.active.spring.profiles=production

Und so für ...

Diese Art der Konfiguration ist sinnvoll, da Sie im generischen Maven-Profil auf die my.active.spring.profiles -Eigenschaft angewiesen sind, die übergeben wird, um einige Aufgaben auszuführen oder einige Werte zu bewerten.
Zum Beispiel verwende ich diese Methode, um ein generisches Maven-Profil zu konfigurieren, in dem die Anwendung gepackt wird, und ein Docker-Image für die ausgewählte Umgebung zu erstellen. 

2
davidxxx

Es gibt mehrere Möglichkeiten, Profile für Ihre Springboot-Anwendung festzulegen.

  1. Sie können dies in Ihrer Property-Datei hinzufügen: 

    spring.profiles.active=dev
    
  2. Programmatischer Weg: 

    SpringApplication.setAdditionalProfiles("dev");
    
  3. Tests machen es sehr einfach zu bestimmen, welche Profile aktiv sind 

    @ActiveProfiles("dev")
    
  4. In einer Unix-Umgebung

    export spring_profiles_active=dev
    
  5. JVM-Systemparameter

    -Dspring.profiles.active=dev
    
0
Pankaj Jaiswal