j'ai application.yml
, application-dev.yml
andapplication-dev.yml
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?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 ~
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
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 )
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>
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
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
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
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");
}
}