领先一步
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}
”的形式。