2017-10-10 3 views
0

J'ai une application Spring Boot qui obtient la configuration du serveur de configuration Spring Cloud (mode natif). Le fichier application.yml de base dans l'emplacement de configuration chargé par le serveur de configuration contient les éléments suivants:Les profils Spring ne sont pas correctement configurés lors de l'obtention de la configuration depuis Spring Cloud Config Server

eureka: 
    client: 
    service-url: 
     defaultZone: ${BOOT_EUREKA_LOCATIONS:http://instance1.localhost:7761/eureka,http://instance2.localhost:7762/eureka,http://instance3.localhost:7763/eureka} 
    register-with-eureka: true 
--- 
spring: 
    profiles: test 
eureka: 
    client: 
    register-with-eureka: false #no registration on Eureka when testing 
    service-url: 
     defaultZone: ${BOOT_EUREKA_LOCATIONS:http://sparky:8761/eureka} 

Lorsque vous frappez le point final pour le serveur de configuration (http://mygateway/config-server/myapp/test), je reviens ce qui suit pour l'application « myapp » en cours d'exécution en le profil de "test":

{ 
"name": "myapp", 
"profiles": [ 
    "test" 
], 
"label": null, 
"version": null, 
"state": null, 
"propertySources": [ 
    { 
     "name": "file:////wherever/application.yml#test", 
     "source": { 
      "spring.profiles": "test", 
      "eureka.client.register-with-eureka": false, 
      "eureka.client.service-url.defaultZone": "${BOOT_EUREKA_LOCATIONS:http://sparky:8761/eureka}" 
     } 
    }, 
    { 
     "name": "file:////whereever/application.yml", 
     "source": { 
      "eureka.client.service-url.defaultZone": "${BOOT_EUREKA_LOCATIONS:http://instance1.localhost:7761/eureka,http://instance2.localhost:7762/eureka,http://instance3.localhost:7763/eureka}" 

Lors de l'exécution myApp dans le profil de test, la valeur de eureka.client.service-url.defaultZone est http://instance1.localhost:7761/eureka,http://instance2.localhost:7762/eureka,http://instance3.localhost:7763/eureka, ce qui est inattendu.

Je m'attendais à ce que l'entrée dans le profil de test le remplace (comme si vous aviez le fichier application.yml localement). Pensées sur pourquoi je ne serais pas obtenir la valeur du profil "test" lors de l'utilisation de la valeur dans myApp?

Mon intention serait d'ajouter les valeurs "par défaut" en haut, et que le "profil" remplace toutes les valeurs par défaut non standard.

Mise à jour: myApp/env ne montre pas le « application.yml # test » chargé, mais il montre le profil de test, mais seulement les valeurs par défaut est retourné à partir du serveur de configuration (pas les les #test):

{ 
    "profiles": [ 
    "test" 
    ], 
    "server.ports": { 
    "local.server.port": 7761 
    }, 
    "configService:file:////wherever/application.yml": { 
    "eureka.client.service-url.defaultZone": "http://instance1.localhost:7761/eureka,http://instance2.localhost:7762/eureka,http://instance3.localhost:7763/eureka" 
+1

Que dit myApp '/ env'? – spencergibb

+0

Ajout d'informations supplémentaires pour répondre à votre question ci-dessus. Bonne question, et peut conduire à la réponse. – LetsBeFrank

Répondre

1

Il s'agissait d'une erreur d'utilisateur complète. Je définissais le profil actif "test" par défaut dans le fichier application.yml au lieu de le transmettre en tant que variable d'environnement ou bootstrap.yml, par conséquent, il n'était pas chargé assez tôt pour le hit du serveur de configuration.