領先一步
VMware 提供培訓和認證,助您加速進步。
瞭解更多Spring 3.1 為環境添加了重要的新支援。這個新的環境 API 使得嚮應用程式公開屬性或有條件地載入部分配置變得容易。
在本系列較早的一篇文章中,Ramnivas 展示了 Cloud Foundry 如何無需手動配置即可自動連線到資料庫。當您需要對這個過程進行更多控制時,例如連線到多個數據庫,雲名稱空間會將 DataSource 的配置精簡為一行 XML。雲名稱空間功能強大,但它只支援在 Cloud Foundry 中執行的應用程式。使用雲名稱空間意味著將該部分配置與 Cloud Foundry 耦合。未部署到 Cloud Foundry 時,應停用此配置。容器外測試是 Spring 哲學的一個基本原則,因此如果應用程式必須部署才能執行整合測試,那是不可接受的。Spring Profiles 解決了這個問題。
Spring 中的配置檔案是配置的一個片段,只有當特定條件為真時才會被啟用。許多應用程式平臺都有開發、測試和生產配置的概念。雖然配置檔案可以這樣使用,但它們也更加靈活。沒有預定義的配置檔案集,除了在沒有定義其他配置檔案時啟用的“default”配置檔案。配置檔案可以用於在不同環境中執行時交換配置,或者在應用程式中啟用可選功能。如何使用它取決於您。
cloud”配置檔案會自動啟用。這為 Cloud Foundry 特定應用程式配置提供了一個預定義、方便的位置。所有云名稱空間的特定用法都應發生在雲配置檔案塊內,以允許應用程式在 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。這是一個如何在雲配置檔案中建立服務 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}”的形式。