4.12。キャッシュ(キャッシュ)
春のフレームワークは、アプリケーション透明アドオンキャッシュのサポートを提供します。本質的に、抽象メソッドは、それによって、キャッシュ内の利用可能な情報に基づいて、実行時間を減少させる、キャッシュに適用されます。ロジックをキャッシュすると、アプリケーションに対して透過的で、それは呼び出し側に何らかの障害が発生することはありません。限り介するなど@EnableCaching
のアノテーションのサポートを有効になっているキャッシング、春ブーツは自動的にキャッシュインフラストラクチャを構成します。
次の例に示すように簡単に説明するとは、バッファは、その簡単な方法としてアノテーションを追加するなど、サービス関連の操作に追加されます。
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;
@Component
public class MathService {
@Cacheable("piDecimals")
public int computePiDecimal(int i) {
// ...
}
}
この例では、キャッシュ潜在的に高価な操作で使用する方法を示しています。コールでcomputePiDecimal
前に、抽象的になりますpiDecimals
キャッシュ内に一致するエントリパラメータ私を探しています。エントリが見つかった場合、キャッシュの内容は、呼び出し元にすぐに返されますが、このメソッドを呼び出すことはありません。それ以外の場合は、メソッドを呼び出し、値を返す前に、キャッシュを更新します。
また、透明な基準を使用することができますJSR-107
(JCache
(たとえば)注釈を@CacheResult
)。しかし、私たちは強く、あなたが春のキャッシュとJCacheのコメントを混在させないことをお勧めします。
あなたが任意の特定のキャッシュライブラリを追加しない場合は、春ブーツは自動的に同時使用で単純なメモリマップを提供するために、プログラムを設定します。あなたがキャッシュに必要がある場合(例えば、前の例のpiDecimals)は、このプログラムは、それを作成するためにあなたを提供します。実際には、生産に使用するための簡単な手順を提供することをお勧めしますが、立ち上がってあなたが理解するために便利ですされていません。プログラムを提供するために使用されるキャッシュを決定した後、アプリケーションが使用するキャッシュを構成する方法については、ドキュメントを必ずお読みください。ほとんどすべてのプロバイダは、明示的にアプリケーションで使用される各キャッシュを構成する必要があります。いくつかの申し出spring.cache.cache-names
デフォルトのキャッシュプロパティをカスタマイズします。
また、透過的にキャッシュからデータを更新または削除。
詳細については、ご覧のSpring Frameworkのドキュメントを
4.12.1。サポートされているキャッシュ・プロバイダー
キャッシュの要約は、実際のストレージを提供していますが、に依存していないorg.springframework.cache.Cache和org.springframework.cache.CacheManager
抽象インタフェースの実装。
あなたがタイプ定義していない場合CacheManager
やCacheResolver
、名前をcacheResolver
(豆を参照してくださいCachingConfigurer
)、春ブーツは(順番に、以下の基準検出を示したプロバイダをしようとしますorg.springframework.boot.autoconfigure.cache.CacheType
):
- ジェネリック
- JCacheの(JSR-107)(EHCacheなど3、Hazelcast、Infinispan、その他)
- ehcacheを2.xの
- Hazelcast
- Infinispan
- Couchbaseの
- Redisの
- カフェイン
- シンプル
- なし
あなたは、設定可能なspring.cache.type
キャッシュプロバイダの特定のプロパティの力を利用します。あなたは完全に(このようなテストなど)一部の環境でのキャッシュを無効にする必要がある場合は、このプロパティを使用します。
使用するspring-boot-starter-cache
基本的なキャッシュの依存関係を追加スターターすばやく。スターターをもたらしましたspring-context-support
。手動で依存関係を追加する場合は、含まれている必要がありますspring-context-support
使用するためにJCache
、EhCache 2.x
またはCaffeine
サポート。
春ブーツが自動的に設定されている場合CacheManager
、あなたは開いて達成することができますCacheManagerCustomizer
完全に初期化する前に、その構成にインターフェース豆、さらに調整を。次の例では、その必要があり示すフラグ設定null
値はマップの一番下まで通過します。
@Bean
public CacheManagerCustomizer<ConcurrentMapCacheManager> cacheManagerCustomizer() {
return new CacheManagerCustomizer<ConcurrentMapCacheManager>() {
@Override
public void customize(ConcurrentMapCacheManager cacheManager) {
cacheManager.setAllowNullValues(false);
}
};
}
前の例では、自動設定の必要性ConcurrentMapCacheManager
。そうでない場合、それはカスタムプログラムを呼び出しません(自分の設定、自動設定または他のキャッシュ・プロバイダーを提供します)。あなたは、カスタムプログラムの任意の数でも使用することができます持っている必要があるかもしれません@Order
またはOrdered
それらを並べ替えます。
ジェネリック
コンテキストは、少なくとも定義された場合はorg.springframework.cache.Cache
豆、一般的なキャッシュを。CacheManager
豆のこの特定のタイプのパッケージ。
JCacheの(JSR-107)
上位クラスを通してJCacheのパスはjavax.cache.spi.CachingProvider
(すなわち、クラスパスミートJSR-107キャッシュ・ライブラリに存在する)、及び導かJCacheCacheManager
によってspring-boot-starter-cache
提供される「ランチャ。」使用可能なライブラリの様々な、春ブーツにとの互換性Ehcache 3
、Hazelcast
およびInfinispan
依存関係の管理を提供します。あなたはまた、他の互換性のあるライブラリを追加することができます。
複数のプロバイダを表示されることがあり、この場合には、明示的にプロバイダを指定する必要があります。JSR-107標準は、春ブーツが持つ次の例に示すように、キャッシュの実装の詳細に対応するために最善を尽くします場所のプロファイルを定義するためにも必須ではありません標準化された方法を行います。
# Only necessary if more than one provider is present
spring.cache.jcache.provider=com.acme.MyCachingProvider
spring.cache.jcache.config=classpath:acme.xml
ときにキャッシュライブラリは、JSR-107の実装のためのネイティブサポートを提供すると同時に、春ブーツは、あなたが別のJSR-107の実装に切り替えた場合ので、あなたは同じ機能を使用することができ、好ましくはJSR-107のサポートになります。
春ブーツはHazelcastのための一般的なサポートを持っています。個々の場合にHazelcastInstance
利用可能である指定がない限り、spring.cache.jcache.config
属性を、そうでない場合は、自動的に再利用されますCacheManager
。
下をカスタマイズするには、2つの方法がありますjavax.cache.cacheManager
:
- あなたが起動時に設定できる
spring.cache.cache-names
キャッシュ特性を作成します。カスタム定義した場合はjavax.cache.configuration.Configuration
豆を、それらをカスタマイズするために使用されます。 - 使用して
CacheManager
呼び出すための参照をorg.springframework.boot.autoconfigure.cache.JCacheManagerCustomizer
Beanにすることは、完全にカスタマイズ可能です。
あなたが標準定義した場合javax.cache.CacheManager
豆を、それが自動的にパッケージorg.springframework.cache.CacheManager
抽象希望実装。もはやそのアプリケーションのカスタマイズ。
ehcacheを2.xの
あなたが見つけることができる場合のルートディレクトリパスで指定されたクラスehcache.xml
ファイルが使用されていますEhCache2.x
。Ehcacheの2.xのを発見した場合は、使用しspring-boot-starter-cache
て「スターター」EhCacheCacheManager
キャッシュマネージャを導くために。この例のようにバックアップ設定ファイルには、提供することもできます。
spring.cache.ehcache.config=classpath:config/another-config.xml
Hazelcast
春ブーツはHazelcastのための一般的なサポートを持っています。あなたが自動的に設定している場合HazelcastInstance
は、自動的にパッケージ化されているCacheManager
中で。
Infinispan
あなたが明示的に指定しなければならないので、デフォルトのプロファイルの場所をInfinispanません。そうでない場合は、デフォルトのブートローダー。
spring.cache.infinispan.config=infinispan.xml
あなたが起動時に設定できるspring.cache.cache-names
キャッシュ特性を作成します。カスタム定義した場合はConfigurationBuilder
豆を、キャッシュをカスタマイズするために使用されます。
Infinispanのための春のブートのサポートは埋め込みモード、および非常に基本的に制限されています。あなたはより多くのオプションが必要な場合は、公式Infinispan春ブートスターターを使用する必要があります。より詳細な情報については、ドキュメントInfinispanを参照してください。
Couchbaseの
CouchbaseのJavaクライアントとした場合couchbase-spring-cache
の実装が利用可能で、あなたはCouchbaseのを設定している、それが自動的に設定されますCouchbaseCacheManager
。設定することでspring.cache.cache-names
財産を、あなたはまた、起動時に他のキャッシュを作成することができます。バケツで実行されているこれらのキャッシュが自動的に設定されています。カスタマイズを使用することにより、あなたはまた、別のバケット内の他のキャッシュを作成することができます。あなたが「メイン」バケツ、「別の」バケツに2秒(cache3)の必要性のカスタムキャッシュの生存時間に2つのキャッシュ(cache1とcache2)を必要としましょう。次のように、最初の二つの構成によってバッファを作成することができます。
spring.cache.cache-names=cache1,cache2
次に、あなたが定義することができ@Configuration
、次のように、追加のバケツとcache3キャッシュを設定するには、クラスを:
@Configuration(proxyBeanMethods = false)
public class CouchbaseCacheConfiguration {
private final Cluster cluster;
public CouchbaseCacheConfiguration(Cluster cluster) {
this.cluster = cluster;
}
@Bean
public Bucket anotherBucket() {
return this.cluster.openBucket("another", "secret");
}
@Bean
public CacheManagerCustomizer<CouchbaseCacheManager> cacheManagerCustomizer() {
return c -> {
c.prepareCache("cache3", CacheBuilder.newInstance(anotherBucket())
.withExpiration(2));
};
}
}
自動的に作成されたクラスタを構成することにより、再利用この設定例。
Redisの
Redisのが利用可能であると設定した場合は自動的に構成しますRedisCacheManager
。あなたは、設定することができspring.cache.cache-names
、起動プロパティで追加のキャッシュを作成し、あなたが使用することができspring.cache.redis.*
、デフォルト値をキャッシュの設定にプロパティを。たとえば、次のような構成とcache1 cache2キャッシュ10分の寿命を作成します。
spring.cache.cache-names=cache1,cache2
spring.cache.redis.time-to-live=600000
二つの別々のキャッシュが同じキーを使用する場合、デフォルトで、それは、なるように、プレフィックスキーを追加して、キーのRedisはない重複、無効な値を返しません。あなたが独自に作成した場合RedisCacheManager
、私たちは強く、この設定を有効にしておくことをお勧めします。
あなた自身を追加することができRedisCacheConfiguration
、完全な構成@Beanを制御することを。あなたは、シリアル化戦略をカスタマイズしたい場合は、有用であろういます。
カフェイン
カフェインは、Guava
グアバのサポートの代わりに使用される、Java 8の書き換え、のキャッシュ。カフェインは、存在する場合、されてCaffeineCacheManager
(によって自動的に設定spring-boot-starter-cache
提供イニシエータ)。起動時のキャッシュを提供することができるspring.cache.cache-names
プロパティを作成し、(順番に示されている)は、以下のいずれかによってカスタマイズすることができます。
- よるキャッシュ仕様
spring.cache.caffeine.spec
の定義 - それは定義されて
com.github.benmanes.caffeine.cache.CaffeineSpec
Beanを - それは定義されて
com.github.benmanes.caffeine.cache.Caffeine
Beanを
例えば、次のような構成及び500のcache1 cache2最大のキャッシュサイズ、10分の生存時間を作成します
spring.cache.cache-names=cache1,cache2
spring.cache.caffeine.spec=maximumSize=500,expireAfterAccess=600s
ユーザーが定義した場合はcom.github.benmanes.caffeine.cache.CacheLoader
豆を、それが自動的にされますCaffeineCacheManager
関連付けます。のでCacheLoader
、すべてのキャッシュキャッシュマネージャに関連付けされますが、それは次のように定義する必要がありますCacheLoader<Object, Object>
。自動設定は、他の一般的なタイプを無視します。
シンプル
あなたが他のプロバイダを見つけることができない場合は、設定は使用していますConcurrentHashMap
キャッシュとしてメモリの単純な実装を。あなたのアプリケーションにはキャッシュライブラリが存在しない場合、これはデフォルトの設定です。デフォルトでは、必要に応じてキャッシュが作成されますが、設定することができますcache-names
利用可能なキャッシュプロパティのリストを制限します。のみcache1とcache2キャッシュ、キャッシュ名を押してプロパティを設定した場合、例えば、以下に示します:
spring.cache.cache-names=cache1,cache2
あなたは、あなたのアプリケーションがリストされていないキャッシュを使用する場合、それはキャッシュを必要なときに、実行時に失敗しますが、起動時に失敗しません。これは、「本物の」キャッシュ・プロバイダーの行動宣言されていないキャッシュを使用する場合と同様です。
なし
コンフィギュレーションが存在する場合@EnableCaching
、適切なキャッシュ構成を使用することが望ましいであろう。特定の状況で必要なキャッシュを無効にした場合、完全に指定するnone
次の例に示すように、ノーオペレーションを達成しないように、キャッシュ・タイプ:
spring.cache.type=none