領先一步
VMware 提供培訓和認證,以加速您的進展。
了解更多Spring 3.1 新增了對環境的重大支援。這個新的 Environment API 讓向應用程式公開屬性或有條件地載入組態片段變得容易。
在本系列的早期文章中,Ramnivas 展示了 Cloud Foundry 如何在沒有手動組態的情況下自動連線到資料庫。當您需要對此過程進行更多控制時,例如連線到多個資料庫,cloud 命名空間將 DataSource
的組態壓縮為僅單行的 XML。cloud 命名空間功能強大,但僅支援在 Cloud Foundry 中執行的應用程式。使用 cloud 命名空間意味著將組態的這部分耦合到 Cloud Foundry。當未部署到 Cloud Foundry 時,應停用此組態。容器外測試是 Spring 哲學的基本原則,因此如果應用程式必須部署才能執行整合測試,那是不可接受的。Spring Profile 解決了這個問題。
Spring 中的設定檔是組態片段,僅在滿足特定條件時才會啟動。許多應用程式平台都有開發、測試和生產組態的概念。雖然設定檔可以以這種方式使用,但它們也更加靈活。除了「default
」設定檔(在未定義其他設定檔時啟動)之外,沒有預定義的設定檔集。設定檔可用於在不同環境中運行時交換組態,或在您的應用程式中啟用可選功能。如何使用它取決於您。
cloud
」設定檔會自動啟用。這為 Cloud Foundry 特定應用程式組態提供了預定義的便利位置。cloud 命名空間的所有特定用法都應在 cloud 設定檔區塊內發生,以允許應用程式在 Cloud Foundry 環境之外運行。
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg ref="mongoDbFactory" />
</bean>
<beans profile="default">
<mongo:db-factory id="mongoDbFactory" dbname="pwdtest" host="127.0.0.1" port="27017" username="test_user" password="efgh" />
</beans>
<beans profile="cloud">
<cloud:mongo-db-factory id="mongoDbFactory" />
</beans>
此範例組態顯示了 Spring 的 MongoTemplate
從兩個替代配置的連線工廠填充。在 Cloud Foundry 上運行時,連線工廠會自動配置。當不在 Cloud Foundry 上運行時,連線工廠會使用連線設定手動配置到本地運行的 MongoDB 實例。
但是,仍然可以從您的 Cloud Foundry 應用程式發送電子郵件。服務提供商,例如 SendGrid,可以通過 HTTP 網路服務代表您發送電子郵件。當應用程式在您自己的資料中心運行時,您可能想要使用公司 SMTP 伺服器,然後在 CloudFoundry.com 上運行時使用 SendGrid。以下是如何在雲端設定檔中建立服務 Bean 以連線到 SendGrid 的範例。
<beans profile="cloud">
<bean name="mailSender" class="example.SendGridMailSender">
<property name="apiUser" value="[email protected]" />
<property name="apiKey" value="secureSecret" />
</bean>
</beans>
<beans profile="cloud">
<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://${cloud.services.mysql.connection.host}:${cloud.services.mysql.connection.port}/${cloud.services.mysql.connection.name}" />
<property name="user" value="${cloud.services.mysql.connection.username}" />
<property name="password" value="${cloud.services.mysql.connection.password}" />
</bean>
</beans>
服務屬性通常採用「cloud.services.{服務名稱}.connection.{屬性}
」的形式。可用的特定連線屬性取決於服務類型。
為了方便起見,如果應用程式綁定了給定類型的單一服務,則將根據服務類型而不是服務名稱建立別名。對於 MySQL 服務,屬性將採用「cloud.services.mysql.connection.{屬性}
」的形式。