web-dev-qa-db-ja.com

Guavaを使用してSpringキャッシュを構成する

キャッシュに関する春のドキュメント プロジェクトでキャッシュを使用できますが、キャッシュ名ごとに期限切れの時間またはサイズを定義するように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) {
    ...
}
10
xedo

キャッシュは個別に構成できます。 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;
}
28
Kyrylo Semenko

Spring構成でGuavaCacheManagerのCacheBuilderを指定できます

  1. Java構成の場合、次のようになります。
@Bean
public CacheManager cacheManager() {
    GuavaCacheManager cacheManager = new GuavaCacheManager();
    cacheManager.setCacheBuilder(
        CacheBuilder.
        newBuilder().
        expireAfterWrite(2, TimeUnit.SECONDS).
        maximumSize(100));
    return cacheManager;
}
  1. XML構成の場合、guavaでCacheBuilderSpecを使用できます
<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

Google guavaキャッシュビルダーをSpring経由でBeanに挿入

17
mavarazy

他の方法で

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")
2
Jaikrat

@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;
}
1
Przemek Nowak