2

J'utilise le démarrage à ressort 1.5.2, et en utilisant des profils mais j'ai trouvé une chose très étrange.démarrage du ressort en utilisant toujours le même profil

mon dossier de ressources de démarrage du printemps comme ceci: enter image description here

configs dans application.yml

spring: 
    profiles: 
    active: @[email protected] 

application dev.yml

spring: 
    profiles: dev 
    datasource: 
     driver-class-name: com.mysql.jdbc.Driver 
     url: jdbc:mysql://localhost:3306/db1 
     username: root 
     password: 
server: 
    port: 8080 

application test.yml

spring: 
    profiles: test 
    datasource: 
    driver-class-name: com.mysql.jdbc.Driver 
    url: jdbc:mysql://localhost:3306/db2 
    username: root 
    password: 

server: 
    port: 8081 

mon pom.xml, juste inclure la partie des ressources et la partie du profil.

<!-- profile --> 
<profiles> 
    <profile> 
     <id>dev</id> 
     <activation> 
      <activeByDefault>true</activeByDefault> 
     </activation> 
     <properties> 
      <build.profile.id>dev</build.profile.id> 
      <profileActive>dev</profileActive> 
     </properties> 
    </profile> 
    <profile> 
     <id>test</id> 
     <properties> 
      <build.profile.id>test</build.profile.id> 
      <profileActive>test</profileActive> 
     </properties> 
    </profile> 
    <profile> 
     <id>prod</id> 
     <properties> 
      <build.profile.id>prod</build.profile.id> 
      <profileActive>prod</profileActive> 
     </properties> 
    </profile> 
</profiles> 


<resources> 
     <resource> 
      <directory>src/main/java</directory> 
      <excludes> 
       <exclude>**/*.java</exclude> 
      </excludes> 
     </resource> 
     <resource> 
      <directory>src/main/resources</directory> 
      <filtering>true</filtering> 
      <includes> 
       <include>application-${profileActive}.yml</include> 
       <include>application.yml</include> 
       <include>templates/*</include> 
      </includes> 
     </resource> 

    </resources> 

Je suis maintenant en train d'utiliser profil de test, a constaté que tout va bien, @[email protected] a été remplacé à test;

mvn clean package -Dmaven.test.skip=true -Ptest 

On dirait que tout est OK.

enter image description here

mais quand je tente de lancer le pot, en utilisant toujours dev profil, bien que nous application.yml montre en utilisant le profil test or prod maintenant.

enter image description here

Je ne sais pas où est le problème dans mes YML configs. Et j'essaie d'inclure toutes les configurations de profil dans un seul fichier application.yml. Mais l'application utilise toujours le profil dev.

configs entièrement dans un seul fichier application.yml

spring: 
    profiles: 
    active: @[email protected] 

--- 
spring: 
    profiles: dev 
    datasource: 
    driver-class-name: com.mysql.jdbc.Driver 
    url: jdbc:mysql://localhost:3306/db1 
    username: root 
    password: 

server: 
    port: 8080 

--- 
spring: 
    profiles: test 
    datasource: 
    driver-class-name: com.mysql.jdbc.Driver 
    url: jdbc:mysql://localhost:3306/db2 
    username: root 
    password: 

server: 
    port: 8081 

--- 
spring: 
    profiles: prod 

server: 
    port: 9000 

enfin, j'essaie d'utiliser les propriétés fichiers, tous mes configs fonctionne très bien, quand je lance mon application peut utiliser le bon profil.

Et maintenant, je veux juste savoir ce qui ne va pas avec mes configs yml.

Merci d'avance!

+0

Pouvez-vous regrouper toutes les pièces dans un référentiel Git pour que vous puissiez facilement voir exactement comment vous avez configuré les choses? –

+0

Je viens de créer un projet simple exactement comme vous l'avez défini. Tout fonctionne comme prévu. Pouvez-vous essayer d'exécuter le pot en dehors de intelliJ? – Patrick

Répondre

1

enfin, je l'ai trouvé la raison.

mon projet est un projet Maven de modules multiples.

un module J'utilise le format yml,

et d'autres est le format property.

lorsque je fais les deux modules à la fois le format yml, tout va bien.

merci à vous tous! Merci!

2

Essayez d'exécuter votre pot comme

java -jar -Dspring.profiles.active=test yourapp.jar 

ou remplacer @ profileActive @ sur le nom du profil dont vous avez besoin.

0

Le problème est peut-être que lorsque Spring démarre votre application.yml, il a déjà pris la décision de revenir au profil par défaut. À partir de là, je pense, il est trop tard pour changer de profil.

Ce que vous pouvez essayer, c'est de définir votre propriété spring.profiles.active dans un fichier de configuration appelé "bootstrap.yml". Cela peut faire l'affaire pour vous.

0

J'ai reproduit votre description avec spring-boot-starter-web comme dépendance supplémentaire pour pouvoir démarrer une petite application.

Tout fonctionne comme prévu. Si je cours mvn clean package -Ptest le profil test sera activé. Pareil avec les autres profils. J'ai mis tous les profils ensemble dans un fichier yml, commentez <include>application-${profileActive}.yml</include> et cela fonctionne aussi.

Tout fonctionne comme prévu, aussi, quand j'exécute le fichier JAR comme vous à partir d'un chemin de système de fichiers parent. Lorsque j'exécute une autre version de Maven avec un autre profil en même temps et redémarre l'application, le nouveau profil sera utilisé.

Si vous utilisez mvn clean package avec un autre profil que dev, il ne devrait pas y avoir de application-dev.yml dans le fichier JAR produit. Sans clean et différentes versions avec différents profils Maven, elles seront toutes dans le fichier JAR.

Quel système d'exploitation utilisez-vous? Est-il possible que quelque chose contienne un handle de fichier sur votre fichier JAR et il ne sera pas remplacé? Mais cela devrait être signalé dans votre build Maven.

+0

merci, je vais essayer à nouveau. – diligent

0

Personnellement, je procédez comme suit:

1) supprimer de votre application.yaml (parce que vous pouvez simplement définir une propriété JVM pour cette)

spring: 
    profiles: 
    active: @[email protected] 

2) supprimer le profil en-tête spécifique de chacun de vos fichiers yaml spécifiques à votre profil. Vous n'en avez pas besoin car le profil est basé sur le suffixe du fichier, par exemple. supprimer ce:

spring: 
    profiles: dev 

3) Comme l'a dit Oleg, il suffit d'exécuter votre tâche avec Dspring.profiles.active = Quelle que soit