【IT168 技术】在上一篇文章当中我们提到在部署Spring应用时,应用所使用的数据服务将会被CLOUD FOUNDRY检测到,而且检测到的数据服务将自动地被重新配置为使用对应的云服务。对简单的应用和演示程序来说,自动重新配置很有效,但是对于生产应用来说,你可能想手动进行更多的配置。同时,如果在应用中同一类型的服务包括多个服务的话,你也需要手动进行更多的配置。Ramnivas暗示说你可以通过明确地使用云数据服务工厂bean比如CloudMongoDbFactoryBean以及CloudRedisConnectionFactoryBean等,选择退出自动重新配置。最简单的方法就是在服务定义中使用 命名空间。本文将详细介绍这部分内容。
在应用中包含命名空间
你需要在构建中引入org.cloudfoundry:cloudfoundry-runtime依赖,如果在构建时使用的是Maven,那么需要在pom.xml中添加如下依赖:
▲
在pom.xml文件中还需要包括Spring Framework Milestone Repository,添加资源库定义的方法如下:
▲
现在,我们就可以在应用上下文文件中添加命名空间了。我们需要声明命名空间(第5行)并提供schema的路径(第8行)。然后我们就可以在xml文件中使用命名空间元素了(第10行):完整的范例如下:
▲
接下来介绍所有可用的命名空间元素及其配置选项
可用的命名空间元素
元素提供了一种为Spring应用配置JDBCDataSource的便利方式
基本的属性包括:
· id – 默认值为服务名
· service-name –只有当应用绑定了多个关系型数据库服务时才需要该属性
注入到JdbcTemplate 的DataSource的简单配置如下所示,在这儿只使用了一个属性用来指定datastore bean的id。
▲
可以使用子元素配置特定的连接并对连接池进行设置。命名空间元素通过子元素以及为最为常用的配置提供支持:
Cloud:Connection选项
▲
cloud:pool选项
▲
指定了额外设置的DataSource配置示例如下:
▲
基本的属性包括:
· id –默认值为服务名
· service-name –只有当应用绑定了多个MongoDB服务时才需要该属性
· write-concern – 所有DB连接都使用WriteConcern值(包括NONE NORMAL, SAFE, FSYNC_SAFE)。如果没有设置该属性,那么所有的写入将默认使用NORMAL。
write-concern属性的值和thecom.mongodb.WriteConcern类可用的值是一一对应的。
▲
注入到MongoTemplate 的MongoDbFactory的简单配置如下所示,在这儿只使用了一个属性用来指定mongoDbFactory bean的id。
▲
cloud:mongo-options
▲
指定了额外设置的MongoDbFactory 配置示例如下:
▲
基本的属性包括:
· id –默认值为服务名
· service-name –只有当应用绑定了多个Redis服务时才需要该属性
注入到RedisTemplate的RedisConnectionFactory 简单配置如下所示,在这儿只使用了一个属性用来指定redisConnectionFactory bean的id。
▲
cloud:pool选项
▲
指定了额外设置的RedisConnectionFactory的配置示例如下:
▲
cloud:rabbit-connection-factory基本的属性包括:
• id –默认值为服务名
• service-name –只有当应用绑定了多个RabbitMQ服务时才需要该属性
注入到RabbitTemplate的RabbitConnectionFactory的简单配置如下所示,在这儿只使用了一个属性用来指定rabbitConnectionFactory bean的id。在下面这个例子中同时使用了两个命名空间:命名空间和 命名空间。
▲
cloud:rabbit-options
▲
指定了额外设置的RabbitConnectionFactory的配置示例如下:
▲
元素扫描应用绑定的所有服务,并为每个服务创建一个恰当类型的bean。在Spring中,你可以把这个元素当做是元素的云扩展,它扫描带有特定注释的bean的类路径,并为每个服务创建一个恰当类型的bean。在应用开发的初始阶段特别有用,这时你希望不用为每个新的服务绑定增加元素就能够直接访问服务bean。
一旦在应用上下文中包括了元素,在Java代码中,只需要为每个绑定服务添加@Autowired依赖即可:
@Autowired DataSource dataSource;
@Autowired ConnectionFactory rabbitConnectionFactory;
@Autowired RedisConnectionFactory redisConnectionFactory;
@Autowired MongoDbFactory mongoDbFactory;
瞧!没费多大功夫我们已经使用了所有的服务。当应用所绑定的所有服务类型都只包括一个服务时,上述方式同样有效。在其他情况下,你需要使用@Qualifier指定服务名(每个自动创建的bean在关联的服务名之后进行命名)。
@Autowired @Qualifier("inventory-db") DataSource inventoryDataSource;
@Autowired @Qualifier("pricing-db") DataSource pricingDataSource;
在这儿,inventoryDataSource bean将绑定inventory-db服务,pricingDataSource bean将绑定pricing-db 服务。
可用的属性包括:
· id – Properties bean的名字
元素显示服务的基本信息,在Spring 3.1中,云的特定属性能够直接展示给应用并通过Spring的属性占位符支持进行使用。在下一篇文章中会对属性格式进行说明。
结论
云命名空间提供了一种简单的连接到云服务的机制。开发者总是希望在本地Tomcat/ tcServer ,本地云以及CloudFoundry.com 上部署同一个应用。Spring 3.1提供的profile是专门针对这个需求而量身定制的。在下一篇文章中我们将讲解如何配置。