Pivotal最近发布了Spring Cloud 1.0开放源码库,为基于JVM的云应用开发提供了一种简单的开发方式。他可使应用程序连接到不同的云服务并且在运行时获取云环境的信息。无论是否基于Spring,应用程序都可以使用Spring Cloud。Spring Cloud 1.0目前支持Cloud Foundry和Heroku两种云平台,也可以通过扩展来支持更多的云平台。
Spring Cloud引入了云平台连接器(Cloud Connector)和服务连接器(Service Connector)的概念。云平台连接器是一个接口,需要由云平台提供者进行实现,以便库中的其他模块可以与该云平台协同工作。Spring Cloud 1.0自带了Cloud Foundry和Heroku两个平台的云平台连接器。服务连接器是一个对象,它代表着与服务的连接。Spring Cloud 1.0中包含了连接到javax.sql.DataSource和各Spring Data项目的服务连接器。开发者也可以定制开发云平台连接器和服务连接器以支持其他的云平台和服务,只需要将连接器打包成JAR文件并添加到classpath中即可。
在基于Spring的应用中使用Spring Cloud,需要添加对spring-cloud-spring-service-connector的依赖。Maven依赖的代码片段如下:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-spring-service-connector</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
在不基于Spring的应用中使用Spring Cloud则需要添加对spring-cloud-core的依赖。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-core</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
如果希望应用程序既能部署在Cloud Foundry也能部署在Heroku上,则需要同时添加如下两个依赖。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-cloudfoundry-connector</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-heroku-connector</artifactId>
<version>1.0.0.RELEASE</version>
</dependency>
下面是一个关于获取DataSource服务和ApplicationInstanceInfo的例子。ApplicationInstanceInfo提供了这个实例中与云平台相关的信息。
// MyController.java
@Controller
public class MyController {
@Autowired(required = false) DataSource dataSource;
@Autowired ApplicationInstanceInfo instanceInfo;
...
}
// CloudConfig.java
@Configuration
@ServiceScan
@Profile("cloud")
public class CloudConfig extends AbstractCloudConfig {
@Bean
public ApplicationInstanceInfo applicationInfo() {
return cloud().getApplicationInstanceInfo();
}
}
注解@Profile("cloud")表示我们希望这一配置只在云环境中加载。注解@ServiceScan会扫描所有的服务并创建一个用于自动装配的bean。@ServiceScan类似于@ComponentScan,不过与@ComponentScan扫描组件和bean不同,@ServiceScan扫描绑定的服务。
关于如何将Spring Cloud部署到Cloud Foundry和Heroku的快速攻略,可以参考Spring Cloud简介的博客。这篇博文使用了一个Spring Boot的示例程序。对于不基于Spring的应用程序可以参考Spring Cloud Core README的使用说明。