第30章 Spring Framework との統合
30.1. Spring Framework との統合
JBoss Data Grid では、ユーザーは Spring キャッシュプロバイダーを定義できるため、アプリケーションにキャッシュサポートを簡単に追加する方法を提供し、Spring のプログラミングモデルに精通したユーザーは JBoss Data Grid によるキャッシングを実現できます。
30.2. Spring Maven 依存関係の定義
Spring モジュールは、ライブラリーの依存関係およびリモートクライアントサーバーの依存関係とは別にバンドルされます。JBoss Data Grid の使用方法に応じて、以下の Maven 設定を使用する必要があります。
ライブラリーモードの Spring 4 用の pom.xml
<dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-spring4-embedded</artifactId> <version>${infinispan.version}</version> </dependency>
リモートクライアントサーバーモードの Spring 4 用の pom.xml
<dependency> <groupId>org.infinispan</groupId> <artifactId>infinispan-spring4-remote</artifactId> <version>${infinispan.version}</version> </dependency>
30.3. プログラミングによる Spring キャッシュサポートの有効化 (ライブラリーモード)
Spring のキャッシュサポートは、アプリケーションでプログラミングを使用して有効にできます。Spring のサポートを有効にするには、以下の手順を実行します。
-
使用している Spring 設定クラスに
@EnableCaching
アノテーションを追加します。 -
@Bean
アノテーションが付けられたSpringEmbeddedCacheManager
を返すメソッドを定義します。
以下のコードスニペットにはこれらの変更が反映されています。
プログラミングによる設定の例
import org.infinispan.configuration.cache.Configuration; import org.infinispan.configuration.cache.ConfigurationBuilder; import org.infinispan.eviction.EvictionStrategy; import org.infinispan.manager.DefaultCacheManager; import org.infinispan.spring.provider.SpringEmbeddedCacheManager; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; [...] @org.springframework.context.annotation.Configuration @EnableCaching public class Config { [...] @Bean public SpringEmbeddedCacheManager cacheManager() throws Exception { Configuration config = new ConfigurationBuilder() .eviction() .strategy(EvictionStrategy.LRU) .maxEntries(150) .build(); return SpringEmbeddedCacheManager(new DefaultCacheManager(config)); } [...]
30.4. プログラミングによる Spring キャッシュサポートの有効化 (リモートクライアントサーバーモード)
Spring のキャッシュサポートは、以下の手順を実行し、アプリケーションでプログラミングを使用すると有効にできます。
-
使用している Spring 設定クラスに
@EnableCaching
アノテーションを追加します。 -
@Bean
アノテーションが付けられたSpringRemoteCacheManager
を返すメソッドを定義します。
以下のコードスニペットにはこれらの変更が反映されています。
プログラミングによる設定の例
import org.infinispan.client.hotrod.RemoteCacheManager; import org.infinispan.client.hotrod.configuration.Configuration; import org.infinispan.client.hotrod.configuration.ConfigurationBuilder; import org.infinispan.spring.provider.SpringRemoteCacheManager; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; [...] @org.springframework.context.annotation.Configuration @EnableCaching public class Config { [...] @Bean public SpringRemoteCacheManager cacheManager() throws Exception { Configuration config = new ConfigurationBuilder() .addServer() .host(ADDRESS) .port(PORT) .build(); return new SpringRemoteCacheManager(new RemoteCacheManager(config)); } [...]
30.5. アプリケーションコードへのキャッシングの追加
Spring Cache Abstraction に記載されている Spring アノテーションを使用すると、キャッシングを各アプリケーションに追加できます。
キャッシュエントリーの追加
キャッシュにエントリーを追加するには、@Cacheable
アノテーションをメソッドに追加します。このアノテーションは戻り値を指定のキャッシュに追加します。たとえば、特定のキーを基に Book
を返すメソッドの場合、次のように @Cacheable
アノテーションを追加します。
@Cacheable(value = "books", key = "#bookId") public Book findBook(Integer bookId) {...}
findBook(Integer bookId)
から返されたすべての Book
インスタンスは、bookId
を値のキーとして使用し、books
という名前のキャッシュに置かれます。
key 属性が指定されていない場合、Spring は提供された引数からハッシュを生成し、生成されたこの値をキャッシュキーとして使用します。アプリケーションが直接エントリーを参照する必要がある場合、エントリーを簡単に取得できるようにするため、key 属性を含めることが推奨されます。
キャッシュエントリーの削除
キャッシュからのこエントリーを削除するには、メソッドに @CacheEvict
アノテーションを付けます。このアノテーションを設定すると、キャッシュのすべてのエントリーをエビクトしたり、指定のキーを持つエントリーのみを対象としたりすることができます。以下の例を見てください。
// Evict all entries in the "books" cache @CacheEvict (value="books", key = "#bookId", allEntries = true) public void deleteBookAllEntries() {...} // Evict any entries in the "books" cache that match the passed in bookId @CacheEvict (value="books", key = "#bookId") public void deleteBook(Integer bookId) {...]}