2017-04-19 79 views
0

我有一個需要使用屬性文件的春季啓動應用程序。這個應用程序將在雲端。所以,財產檔案也將在乍一看。雲與外部屬性文件的春季啓動應用程序

我正在使用雲代工與雲進行通信,並使用'cf push'推送我的spring-boot應用程序。我的問題: 1.何處以及如何存儲屬性文件?它可以存儲在雲端嗎?怎麼樣?還是需要將其存儲在git上並將其引用到應用程序中? 2.如何使用位於外部位置的這個屬性文件?

回答

2

您無法在雲代工中訪問文件系統。您必須將配置文件保存在classpath本身中,並從classpath加載屬性,這也是Spring引導的默認行爲。 Spring引導的application.properties文件(位於src/main/resource中)進入你的jar並加載它。因此,當你構建一個嵌入式jar/war時,它會進入classpath並直接運行。

處理屬性的雲代工方式是通過VCAP變量。您可以使用cf push期間使用的deplyoment清單來外化這些屬性。 在您的清單yml文件中定義如下的屬性。

env: 
    myprop1: myvalue1 
    myprop2: myvalue2 

使用此方法,您的應用程序的所有屬性將作爲正常的系統屬性提供。你可以在你的應用程序中以Java代碼中的System.getProperties()方式訪問它們。

https://docs.run.pivotal.io/devguide/deploy-apps/environment-variable.html#VCAP-APPLICATION 

https://docs.cloudfoundry.org/devguide/deploy-apps/manifest.html 

這兩種方法的主要缺點是應用程序需要重建/重新推送到雲代工廠。應用程序無法在應用程序啓動並運行時動態讀取屬性中的更改。

爲了克服這個問題,Spring-cloud有一個項目cloud-config。這可以通過GIT或像File System/Vault等少數其他類型的數據源來支持。這可以作爲不同的配置服務運行。 您可以在您的應用程序屬性文件中定義配置服務器,它使應用程序從配置服務讀取屬性。

https://cloud.spring.io/spring-cloud-config/spring-cloud-config.html 

大多數時候,u需要在微服務架構集中的屬性,你可以去配置服務的方法。

+0

1.爲什麼雲代工廠不提供文件系統訪問? – Tiya

+0

2.我希望我的spring-boot應用程序僅在雲上部署一次。但是,我希望能夠在以後更改我的屬性文件內容,而無需在雲上重新部署我的spring-boot-application。這可以通過使用application.properties來實現嗎?即使在部署spring-boot應用程序之後,我們是否可以重新加載應用程序.properties? – Tiya

+1

雲代工在虛擬環境中運行。應用程序的每個實例都在其自己的獨立容器中運行。因此文件系統只是暫時的。閱讀此鏈接瞭解雲代工廠的工作原理。 https://docs.cloudfoundry.org/devguide/deploy-apps/prepare-to-deploy.html#filesystem你無法實現重新加載應用程序屬性。一旦你改變了一些屬性,那麼你需要重建和cf推送應用程序到雲代工廠。您可能不得不考慮使用Spring雲配置服務器作爲您的用例。 –

0

正確地指出,它最適合使用Spring-Cloud Config服務。該服務將有憑據打Git回購(主要是網址,用戶名和密碼),然後你可以獲得屬性。

通常會定義部署文件(帶有配置文件的清單文件)。因此,如果您使用的測試環境爲Dspring.profiles.active = Test,那麼您的應用程序將使用它來加載。

故事的另一方面是在CloudConfigService中定義多個配置文件。您可以通過使用spring.cloud.config.label = youLabel在這兩者之間切換。使用ConfigService確實有幫助,因爲它還提供了使用配置文件選擇在配置之間切換的簡單方法

相關問題