2017-07-31 1 views
0

J'essaie de définir l'environnement de mon application Spring Boot (1.5.4.RELEASE) au moment de l'exécution, mais il semble que quelque chose ne soit pas aligné.Environnement VM arg passé à bootRun n'étant pas détecté par l'application Spring Boot

Mon application.yml est défini comme ceci:

spring: 
    profiles.active: ${env:local} 
--- 
spring: 
    profiles: local 
    foo: bar 
--- 
spring: 
    profiles: dev 
    foo: bar 

Dans une classe que j'ai annoté @Configuration, j'ai une méthode qui effectue les opérations suivantes que je peux montrer l'environnement qui est utilisé :

@Value('${spring.profiles.active}') 
String activeProfile 

@PostConstruct 
def bootComplete() { 
    println "App started with profile: $activeProfile" 
} 

dans cette configuration, lorsque mon application démarre, je vois cela dans la console:

App started with profile: local 

Si je modifie $ {env: locale} être $ {env: dev} dans mon application.yml et je commence l'application, je vois cela dans la console:

App started with profile: dev 

Mon but est de démarrer l'application avec des arguments VM pour définir le profil actif lors de l'exécution. J'ajoute l'argument: -Denv = dev mais il semble qu'il n'a aucun effet sur le démarrage de l'application. Quelqu'un peut-il suggérer ce que je pourrais négliger ici?

Répondre

0

L'exécution de -Denv=env n'aura aucun effet puisque env n'est pas une clé de propriété. Voici comment vous pouvez le faire:

-Dspring.profiles.active=dev 
+0

Merci pour votre contribution. Malheureusement, j'ai commencé avec -Dspring.profiles.active = dev, et je vois toujours le profil actif comme local. –

1

J'ai trouvé la solution à mon problème. Le problème était que je commençais l'application en utilisant Gradle bootRun. Mon hypothèse était que l'ensemble d'arguments VM serait utilisé. Je cours maintenant l'application en appelant la classe directement, et les arguments VM fonctionnent (à la fois -Denv et -Dspring.profiles.active)