2017-10-10 40 views
0

我有一個Spring Boot應用程序從Spring Cloud配置服務器(本機模式)獲取配置。在由配置服務器加載的配置位置的基礎application.yml文件包含以下內容:當從Spring Cloud Config服務器獲取配置時,彈簧配置文件沒有正確排序

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} 

擊球時對配置服務器端點(http://mygateway/config-server/myapp/test),我回來在運行「的myapp」應用以下輪廓 「測試」:

{ 
"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}" 

當在測試配置文件中運行對myApp,eureka.client.service-url.defaultZone的值是http://instance1.localhost:7761/eureka,http://instance2.localhost:7762/eureka,http://instance3.localhost:7763/eureka,這是出乎意料的。

我會期望在測試配置文件中的條目覆蓋它(如果你有本地application.yml的話)。關於在myApp中使用該值時爲什麼我不會從「測試」配置文件獲取值?

我的目的是在頂部添加「默認」值,並使「配置文件」覆蓋任何非標準默認值。

更新: 對myApp/ENV不顯示「application.yml#考」載,但它顯示了測試配置文件,但只有默認值從配置服務器(而不是那些#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

myApp'/ env'說什麼? – spencergibb

+0

添加了其他信息以回答上面的問題。偉大的問題,並可能導致答案。 – LetsBeFrank

回答

1

這是一個完整的用戶錯誤。我在application.yml中設置了默認的「測試」活動配置文件,而不是作爲環境變量或bootstrap.yml傳入,因此配置服務器命中時不會很快加載。