领先一步
VMware 提供培训和认证,以快速提升您的进度。
了解更多Spring 3.1 对环境添加了重要的全新支持。这个新的Environment API 简化了向应用程序公开属性或有条件地加载配置片段的过程。
在本系列之前的文章中,Ramnivas 展示了Cloud Foundry 如何自动连接到数据库而无需手动配置。当您需要更多地控制此过程时(例如,连接到多个数据库),云命名空间将 `DataSource` 的配置压缩到只有一行 XML 代码。云命名空间功能强大,但仅支持在 Cloud Foundry 上运行的应用程序。使用云命名空间意味着将该部分配置与 Cloud Foundry 耦合。未部署到 Cloud Foundry 时,应禁用此配置。容器外测试是 Spring 理念的基本原则,因此如果必须部署应用程序才能运行集成测试,这是不可接受的。Spring 配置文件解决了这个问题。
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}
”的形式。