最近遇到好幾個與此有關的問題。
其中一個典型的問題是,明明bootstrap.yml指定了端口,但還是顯示為默認的8080端口。最后我用了一個常規的死辦法將bootstrap.yml改為application.yml就好了。
於是我不得不思考,為什么會出現這樣的問題。通過搜索我了解到了以下幾點。
為什么bootstrap.yml會比application.yml先加載?
啟動上下文時,Spring Cloud 會創建一個 Bootstrap Context,作為 Spring 應用的 Application Context 的父上下文。
初始化的時候,Bootstrap Context 負責從外部源加載配置屬性並解析配置。這兩個上下文共享一個從外部獲取的 Environment。Bootstrap 屬性有高優先級,默認情況下,它們不會被本地配置覆蓋。
也就是說如果加載的 application.yml 的內容標簽與 bootstrap 的標簽一致,application 也不會覆蓋 bootstrap,而 application.yml 里面的內容可以動態替換。