領先一步
VMware 提供培訓和認證,以加速您的進步。
瞭解更多Spring 3.1 為環境增加了重要的全新支援。這種新的 Environment API 使您可以輕鬆地將屬性公開給應用程式或有條件地載入配置片段。
在本系列的早期文章中,Ramnivas 展示了 Cloud Foundry 如何自動連線到資料庫而無需手動配置。當您需要更多地控制此過程時,例如,連線到多個數據庫,cloud 名稱空間將 DataSource
的配置壓縮到僅一行 XML 中。cloud 名稱空間功能強大,但僅支援在 Cloud Foundry 中執行的應用程式。使用 cloud 名稱空間意味著將該部分配置耦合到 Cloud Foundry。當未部署到 Cloud Foundry 時,應停用此配置。容器外測試是 Spring 理念的基本原則,因此如果應用程式必須部署才能執行整合測試,那是不可接受的。Spring Profiles 解決了這個問題。
Spring 中的Profile 是配置的一個片段,僅在滿足特定條件時才啟用。許多應用程式平臺都具有開發、測試和生產配置的概念。雖然可以使用 Profiles 以這種方式,但它們也更加靈活。除了在未定義其他 Profiles 時啟用的“default
” Profile 之外,沒有預定義的 Profiles 集。Profile 可用於在不同環境中執行時交換配置或在應用程式中啟用可選功能。如何使用它取決於您。
cloud
” Profile。這為 Cloud Foundry 特定的應用程式配置提供了一個預定義的便捷位置。cloud 名稱空間的所有特定用法都應發生在 cloud Profile 塊中,以允許應用程式在 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 Web 服務代表您傳送電子郵件。當應用程式在您自己的資料中心中執行時,您可能想要使用公司 SMTP 伺服器,然後在 CloudFoundry.com 上執行時使用 SendGrid。以下是如何在 cloud Profile 中建立服務 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.{service-name}.connection.{property}
”的形式。可用的特定連線屬性取決於服務型別。
為方便起見,如果只有一個給定型別的服務繫結到應用程式,則將基於服務型別而不是服務名稱建立別名。對於 MySQL 服務,屬性將採用“cloud.services.mysql.connection.{property}
”的形式。