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を読むといいだろう。