云计算 频道

CLOUD FOUNDRY实战:SPRING PROFILES

  【IT168 专稿】Spring 3.1针对运行环境增加了重要的支持。新的Environment API使向应用公开属性,有条件地加载配置片段变得容易起来。

  在之前的文章当中,Ramnivas介绍了不用进行手动配置,Cloud Foundry如何自动连接数据库。当你需要控制连接数据库的过程时,比如连接到多个数据库,命名空间会将DataSource的配置精简为XML文件中的一行。命名空间功能很强大,但是它只支持运行在Cloud Foundry中的应用。使用命名空间意味着进行了配置与Cloud Foundry之间的耦合。当将应用部署到其他环境时,应该禁用这个配置。摆脱容器测试是Spring哲学的基本原则,因此为了进行整合测试而必须部署应用,这是不可接受的。Spring Profile恰恰解决了这一问题。

  Profile在Spring中是一个配置段,只有当特定的条件为真时,才会被激活。很多应用平台都有开发,测试以及生产配置的概念。在不同的阶段使用profile也更灵活。profile的预定义并不存在,当没有定义profile时,一个默认的profile将被激活。当在不同的环境下运行或者启用应用的附加功能时,都可以使用profile进行配置置换。完全取决于你想怎么用。

  隔离CLOUD FOUNDRY的特定配置

  当在Cloud Foundry中部署Spring应用时,将自动启用”cloud” profile。这为与Cloud Foundry相关的特定应用配置提供了便利的预定义路径。为了允许应用在Cloud Foundry环境的外部运行,对命名空间的明确使用都应该存在于云配置块中。 

CLOUD FOUNDRY实战:SPRING PROFILES

  上述配置样例表明Spring的MongoTemplate需要在两个配置连接工厂之间做出选择。当运行在Cloud Foundry上时,将自动配置连接工厂。当不在Cloud Foundry上运行时,可以手动配置连接工厂,将连接设置为在本地运行的MongoDB实例。

  在CLOUD FOUNDRY上启用应用特性

  我们被问到的一个常见的问题就是,“如何在应用中发送邮件?”不幸的是,为避免垃圾邮件以及邮件滥用,运行在CloudFoundry.com上的应用的SMTP已经被阻止了。

  但是,运行在CloudFoundry.com上的应用仍然可以发送邮件。服务提供方,比如SendGrid能够以你的名义通过HTTP Web服务发送邮件。当应用运行在你自己的数据中心当中时,你可能想使用企业的SMTP服务器,当应用运行在CloudFoundry.com上时就使用SendGrid。下面这个例子说明了如何在云 profile中创建service bean连接到SendGrid。

CLOUD FOUNDRY实战:SPRING PROFILES

  CLOUD PROPERTIES

  除了profile之外,云的特定属性现在能够直接展示给应用并通过Spring的属性占位符支持进行使用。这些属性包括了该应用的基本信息,比如名字,云提供方以及应用绑定的所有服务的详细连接信息。这使得创建你自己的服务连接工厂变得容易起来。如果由于某种原因,你的服务需要c3p0连接池而不是已经提供的连接池,从下面这个例子可以看出,很容易就能够实现。

CLOUD FOUNDRY实战:SPRING PROFILES

  服务属性一般采用的形式为“cloud.services.{service-name}.connection.{property}”。能够使用的特定的连接属性取决于服务的类型。

  为了方便起见,如果应用绑定的每种服务类型只包括一个服务的话,将会基于服务类型而不是服务名创建一个别名。以MySQL服务为例,该服务属性将采用如下形式:“cloud.services.mysql.connection.{property}”。

  自动化

  运行在Cloud Foundry上的所有Spring应用都能够自动使用云profile和属性,但是需要使用Spring 3.1或更高的版本。我们的目标是创建在Cloud Foundry上运行Spring应用的无障碍路径,同时在需要时能够很容易地进行控制。更为重要的是,我们想为Spring应用提供最高限度的可移植性,也就是不需要针对每个部署环境对应用进行配置就可以在其上运行。

0
相关文章