web-dev-qa-db-fra.com

comment utiliser les profils de démarrage Spring

j'ai application.yml, application-dev.ymlandapplication-dev.yml

  1. J'utilise la commande maven mvn spring-boot:run -Dspring.profiles.active=dev cela ne fonctionne pas et je ne peux pas choisir le profil dev à l'aide de mvn spring-boot:run. Comment est-ce que je le choisis?
  2. La documentation indique que Java -jar XXX.jar --spring.profiles.active=dev fonctionne et j'ai essayé -Dspring.profiles.active=dev mais cela ne fonctionne pas. Et dans mon projet, j’utilise Java -jar XXX.jar, cela fonctionne, mais si j’utilise Java -jar XXX.jar --spring.profiles.active=dev pour choisir le profil de dev, la console affiche autant de journaux et avertit que je ne vois jamais le Java -jar XXX.jar utilisé, et me dis APPLICATION FAILED TO START 

alors comment résoudre deux problèmes? merci ~

17
twogoods

Je ne suis pas sûr de bien comprendre la question, mais j'essaierai d'y répondre en fournissant quelques détails sur les profils dans Spring Boot.

Pour votre exemple n ° 1, en fonction de la documentation, vous pouvez sélectionner le profil à l'aide du plug-in Spring Boot Maven à l'aide de -Drun.profiles.

Edit: pour Spring Boot 2.0+, run a été renommé en spring-boot.run

mvn spring-boot:run -Drun.profiles=dev

http://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-profiles.html

Dans votre exemple n ° 2, vous définissez le profil actif après le nom du fichier jar. Vous devez fournir l'argument JVM avant le nom du fichier jar que vous exécutez.

Java -jar -Dspring.profiles.active=dev XXX.jar

Informations générales:

Vous mentionnez que vous avez à la fois un application.yml et un application-dev.yml. Si vous utilisez le profil dev, les fichiers les deux config seront chargés. Les valeurs de application-dev.yml remplaceront les mêmes valeurs fournies par application.yml, mais les valeurs des deux fichiers yml seront chargées.

Il existe également plusieurs façons de définir le profil actif.

Vous pouvez les définir comme vous l'avez fait, en utilisant -Dspring.profiles.active lors de l'exécution de votre fichier jar. Vous pouvez également définir le profil à l'aide d'une variable d'environnement SPRING_PROFILES_ACTIVE ou d'une propriété système spring.profiles.active.

Plus d'informations peuvent être trouvées ici: http://docs.spring.io/spring-boot/docs/current/reference/html/howto-properties-and-configuration.html#howto-set-active- profilés à ressort

32
francis

Si vous utilisez le plug-in Spring Boot Maven, exécutez:

mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar

( https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-profiles.html )

2
Pedro H

Vous n'avez pas besoin de trois fichiers .yml pour cela. Vous pouvez avoir un seul fichier application.yml et écrire les propriétés spécifiques du profil dans le même, où chaque section de profil est séparée par 3 tirets (---).

Ensuite, pour sélectionner le profil actif actuel, vous pouvez spécifier cela également dans votre fichier application.yml, comme ceci:

spring:
  profiles:
    active:
    - local

Cependant, cette configuration sera remplacée si vous définissez une variable d'environnement, par exemple: SPRING_PROFILES_ACTIVE = dev


Voici un exemple de fichier pour votre besoin:

# include common properties for every profile in this section

server.port: 5000 

spring:
  profiles:
    active:
    - local

---
# profile specific properties

spring:
  profiles: local

  datasource:
    url: jdbc:mysql://localhost:3306/
    username: root
    password: root

---
# profile specific properties

spring:
  profiles: dev

  datasource:
    url: jdbc:mysql://<dev db url>
    username: <username>
    password: <password>
2
sumit singh

Si vous utilisez maven, définissez vos profils comme indiqué ci-dessous dans votre pom.xml.

<profiles>
<profile>
    <id>local</id>
    <activation>
        <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
        <jdbc.url>dbUrl</jdbc.url>
        <jdbc.username>dbuser</jdbc.username>
        <jdbc.password>dbPassword</jdbc.password>
        <jdbc.driver>dbDriver</jdbc.driver>
    </properties>
</profile>
<profile>
    <id>dev</id>
    <properties>
        <jdbc.url>dbUrl</jdbc.url>
        <jdbc.username>dbuser</jdbc.username>
        <jdbc.password>dbPassword</jdbc.password>
        <jdbc.driver>dbDriver</jdbc.driver>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>
    </dependencies>
</profile>
<profile>
    <id>prod</id>
    <properties>
        <jdbc.url>dbUrl</jdbc.url>
        <jdbc.username>dbuser</jdbc.username>
        <jdbc.password>dbPassword</jdbc.password>
        <jdbc.driver>dbDriver</jdbc.driver>
    </properties>
</profile>

Par défaut, c’est-à-dire que si aucun profil n’est sélectionné, le profil local sera toujours utilisé.

Pour sélectionner un profil spécifique dans Spring Boot 2.x.x, utilisez la commande ci-dessous.

mvn spring-boot:run -Dspring-boot.run.profiles=dev

Si vous voulez construire/compiler en utilisant les propriétés d'un profil spécifique, utilisez la commande ci-dessous.

mvn clean install -Pdev -DprofileIdEnabled=true
2
Amimo Benja

Créez des fichiers .yml spécifiques dans le répertoire des ressources pour chaque environnement (par exemple: dev, qa, stg, etc.) nécessaire à l'exécution de l'application . image des fichiers .yml dans le répertoire des ressources

Si vous utilisez spring-boot-maven-plugin 2.0.5.RELEASE dans votre fichier pom.xml, vous pouvez ajouter les profils dans la balise de dépendance de la manière suivante: . image de pom.xml plugin (vous pouvez configurer plusieurs profils à l'aide de plusieurs balises de profil)

Vous pouvez ensuite utiliser les commandes suivantes pour générer et exécuter le projet.

1) mvn clean install
2) mvn spring-boot:run -Dspring-boot.run.default==qa

Ensuite, vous verrez que le profil par défaut est défini sur qa lors de l'exécution du projet . affichant le profil par défaut lors de l'exécution de l'application

0
Ishadi Gamage

Vous pouvez spécifier les propriétés en fonction des profils dans un application.properties (yml) comme ici . Alors mvn clean spring-boot:run -Dspring.profiles.active=dev devrait l'exécuter correctement. Ça marche pour moi

0
Sergii Getman

L'annotation @Profile vous permet d'indiquer qu'un composant est éligible à l’enregistrement quand un ou plusieurs profils spécifiés sont actif. En utilisant notre exemple ci-dessus, nous pouvons réécrire le dataSource configuration comme suit:

@Configuration
@Profile("dev")
public class StandaloneDataConfig {

    @Bean
    public DataSource dataSource() {
        return new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.HSQL)
            .addScript("classpath:com/bank/config/sql/schema.sql")
            .addScript("classpath:com/bank/config/sql/test-data.sql")
            .build();
    }
}

Et un autre:

@Configuration
@Profile("production")
public class JndiDataConfig {

    @Bean(destroyMethod="")
    public DataSource dataSource() throws Exception {
        Context ctx = new InitialContext();
        return (DataSource) ctx.lookup("Java:comp/env/jdbc/datasource");
    }
}
0
Adam Ostrožlík