PivotalがSpring Cloud 1.0をリリースした。これは、JVMベースのアプリケーションをクラウド向けにシンプルに開発するためのオープンソースのライブラリを提供する。アプリケーションはさまざまなクラウドサービスに接続でき、実行時にクラウド環境の情報を見つけることができる。Springベースのアプリケーションでもそうでないアプリケーションでも利用することができ、Cloud Foundry、Herokuをサポートする。ほかのプラットフォームへサポートを拡張することもできる。
Spring CloudはCloud ConnectorとService Connectorというふたつの概念がある。A Cloud Connectorはクラウドプロバイダが実装するインターフェースで、ライブラリがクラウドプラットフォームにアクセスできるようにする。Spring Cloud 1.0にはCloud Foundry Cloud ConnectorとHeroku Cloud Connectorがある。一方、Service Connectorはサービスとのコネクションを表すオブジェクトだ。Spring Cloud 1.0はjavax.sql.DataSourceとSpring Dataプロジェクト向けのService Connectorが含まれている。Custom Cloud ConnectorsとService Connectorsはほかのクラウドプラットフォームやサービス向けにも開発される可能性がある。使い方は簡単で、JARファイルをクラスパスに追加するだけだ。
Spring CloudをSpringアプリケーションから使うには、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-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は似ているが、コンポーネントやBeanを探すのではなく、バインドされたサービスを探す。
Cloud FoundryやHerokuへの配置方法を簡単に知るには、Introducing Spring Cloudというブログ記事を読むといいだろう。このブログではSpring Bootサンプルアプリケーションを使っている。Springを利用していないアプリケーションの場合は、Spring Cloud Core READMEを読むといいだろう。