キャッシュに関する春のドキュメント プロジェクトでキャッシュを使用できますが、キャッシュ名ごとに期限切れの時間またはサイズを定義するようにguavaを構成するにはどうすればよいですか?
applicationConfig.xml
<bean id="cacheManager" class="org.springframework.cache.guava.GuavaCacheManager"/>
Foo.Java
@Cacheable(value="courses", key="#user.id")
public List<Course> getCoursesByUser(User user) {
...
}
キャッシュは個別に構成できます。 Spring Guava cache を参照してください
@Bean
public CacheManager cacheManager() {
SimpleCacheManager simpleCacheManager = new SimpleCacheManager();
GuavaCache bookCache = new GuavaCache("book", CacheBuilder.newBuilder().build());
GuavaCache booksExpirableCache = new GuavaCache("books", CacheBuilder.newBuilder()
.expireAfterAccess(30, TimeUnit.MINUTES)
.build());
simpleCacheManager.setCaches(Arrays.asList(bookCache, booksExpirableCache));
return simpleCacheManager;
}
Spring構成でGuavaCacheManagerのCacheBuilderを指定できます
@Bean
public CacheManager cacheManager() {
GuavaCacheManager cacheManager = new GuavaCacheManager();
cacheManager.setCacheBuilder(
CacheBuilder.
newBuilder().
expireAfterWrite(2, TimeUnit.SECONDS).
maximumSize(100));
return cacheManager;
}
<bean id="legendaryCacheBuilder"
class="com.google.common.cache.CacheBuilder"
factory-method="from">
<constructor-arg value="maximumSize=42,expireAfterAccess=10m,expireAfterWrite=1h" />
</bean>
詳細については、以下を参照してください。
http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/cache/CacheBuilderSpec.html
他の方法で
XML
<bean id="cacheManager" class="org.springframework.cache.guava.GuavaCacheManager">
<property name="cacheBuilderSpec">
<bean class="com.google.common.cache.CacheBuilderSpec" factory-method="parse">
<constructor-arg name="cacheBuilderSpecification" value="expireAfterWrite=55m"/>
</bean>
</property>
</bean>
Java
@Cacheable(value = "tokenValue", cacheManager = "cacheManager")
@mavarazyの答えが一番だと思います。自動ミストキャッシュ構成が必要な場合にのみ、次の方法で追加できます。
まず、必要に応じて自動的にキャッシュを作成する独自のキャッシュマネージャーを定義します。
public class MyCacheManager extends SimpleCacheManager {
@Override
protected Cache getMissingCache(String name) {
// or different cache config if you need
return new GuavaCache(name, CacheBuilder.newBuilder().maximumSize(250).expireAfterWrite(10, TimeUnit.MINUTES).build());
}
}
そして今、あなたはキャッシュマネージャの設定を定義することができます:
@Bean
public CacheManager cacheManager() {
SimpleCacheManager simpleCacheManager = new MyCacheManager();
GuavaCache specificCacheConfig = new GuavaCache("specificCacheConfigName",
CacheBuilder.newBuilder().expireAfterAccess(60, TimeUnit.MINUTES).build());
simpleCacheManager.setCaches(Collections.singletonList(specificCacheConfig));
return simpleCacheManager;
}