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