這篇文章將幫助您在Cloud Foundry上使用MongoDB構建Spring 3.1 Web應用程序。 除了推動Cloud Foundry之外,您還可以使用MongoDB實例在本地環境中進行開發。
目標
此博客發布的目標是在本地構建應用程序,然后發布到本地Cloud Foundry實例。 我們將利用Cloud Foundry運行時和新的Spring Profiles
設定
- 使用Cloud Foundry創建帳戶( https://www.cloudfoundry.com/micro )
- 按照說明設置您自己的Micro Cloud
- 我使用VMWare的播放器
- 驗證微云控制臺匹配的“ vmc信息”
- 下載MongoDB(至少2.0版)
- 安裝并熟悉Maven 3( http://maven.apache.org )
- 熟悉Spring 3.1,Spring Data和Spring MongoDB
- 克隆或下載源代碼( https://github.com/mike-ensor/first-cloud-app )
- 使用以下命令在本地運行應用程序:
mvn clean package cargo:run -DskipTests
- 轉到http:// localhost:8080 / home
個人資料
Spring 3.1中的新功能是環境配置文件,開發人員可以根據環境參數激活多組Bean。 我發現了幾個“ 陷阱 ”,一個是使用概要文件對bean的無證訂購。
看一下data-services.xml 。 請注意,之前如何定義MongoTemplate。 這違反了我的直覺,因為MongoTemplate引用了在MongoTemplate定義下方定義的MongoFactory對象。
第二個“陷阱”來自何時何地設置參數以啟用Spring的配置文件。 文檔和博客未明確提及開發人員必須指定活動的配置文件。 文檔暗示“ 默認 ”默認情況下處于活動狀態,但事實并非如此。 為了激活默認配置文件,我將其添加為貨物設置中的系統屬性。 (只要它是系統環境屬性,就可以隨時隨地設置它)。 看一下第40行周圍的pom.xml文件,以獲取本地Maven屬性,然后看一下253行附近的環境變量。
本地開發與云開發
與Cloud Foundry進行交互的主要目標之一是,我希望有一個本地開發環境來加速和簡化開發并通過調試降低復雜性。 請注意
data-services.xml中有一個“云”配置文件和一個“默認”文件。 “默認”概要文件的要點是具有在本地環境中構造的bean。 您可以看到MongoFactory有兩種定義,一種使用Spring Data MongoDB的XML名稱空間,另一種使用CloudFoundry Runtime的名稱空間。 我不會介紹這些功能為何以它們的方式工作,因此,如果您需要信息,請參閱http://blog.springsource.org/2011/04/12/cloud-foundry-for-spring-developers/和http://blog.springsource.org/2011/11/09/using-cloud-foundry-services-with-spring-applications-part-3-the-cloud-namespace/
推向Cloud Foundry
現在您已經擁有了Webapp的本地運行實例,您將注意到該工件稱為“ first-cloud-app.war ”,您可以在“ / target”文件夾中找到該工件。 推送到Cloud Foundry實例時,這是一個問題,因為名稱不能包含任何非字母字符。 Cloud Foundry的vmc工具是從負責開源PaaS服務的VCAP開源項目構建的。 另一個PaaS服務包括App Fog,它使您基本上可以使用相同的命令,但是將“ vmc”替換為“ af”。 兩種服務都是命名問題的受害者。
為了解決命名問題,我創建了一個Maven配置文件云 ,將WAR工件構建為“ mikeensor.war”。 請更改此名稱以匹配您的應用程序名稱,因為您沒有要發布的用戶名/密碼(或DNS)要發布到我的微型實例。 該名稱將需要適合URL模式http:// < applicationname >。 .cloudfoundry.me。
要發布到本地Cloud Foundry微型實例,請轉到根文件夾并鍵入以下內容。 (這是假設您的微型實例正在運行,并且沒有“紅色”錯誤。
mvn clean package -Pcloud
vmc push <application name> -path target/
(如果您之前已經推送過,則需要輸入:
vmc update <application name> -path target/
注意:可以將Maven插件用于Cloud Foundry,但是,在不更改工件名稱的情況下,我仍然無法使其正常工作。 啟用并連接到服務
您必須創建一個或多個服務,以便您的應用程序可以綁定到數據源。 當將應用程序加載到Cloud Foundry中時,VCAP(vmc)應用程序處理配置的工作方式。 它通過在命名空間配置元素中使用的環境變量來執行此操作。
在我的示例中,我通過輸入以下內容創建了MongoDB服務:
vmc create-service mongodb --name <what you want to call your instance>
我將其命名為“ second”(因為我已經創建了“ first”),您將看到在data-services.xml中 ,云XML配置引用了服務的名稱。
請注意,如果您有多個MongoDB實例,則要使用其他實例時,需要進行一些Spring配置(@Qualifier)。 此博客文章未涵蓋此內容。
現在,您需要將服務“綁定”到您的應用程序。 通過鍵入以下內容來完成:
vmc bind-service <name above> <application name>
測試出來
您應該可以轉到http:// 。 .cloudfoundry.me / home(例如:http://mikeensor.mikeensor.cloudfoundry.me/home)
恭喜你! 您不僅應該成功地部署到綁定到MongoDB實例的Cloud Foundry(微型實例),而且還應該能夠在您的本地環境中運行! 如果有時間,我將嘗試添加更詳細的功能,例如多種類型的存儲,并在發現它們時發布其他“陷阱”。
參考: Spring 3.1 + Cloud Foundry +我們的JCG合作伙伴 Mike的本地開發 (在Mike的網站博客上)。
翻譯自: https://www.javacodegeeks.com/2012/11/spring-3-1-cloud-foundry-and-local-development.html