【问题标题】:Migrating from GuavaCache to EhCache (Spring Boot)从 GuavaCache 迁移到 EhCache (Spring Boot)
【发布时间】:2019-01-07 00:58:55
【问题描述】:

我正在尝试更改以下方法以使用 EhCache 缓存而不是 Guava 缓存,因为从 Spring 5.0 中删除了 Guava 缓存。似乎没有任何关于如何简单地实例化 EhCacheCache 对象并将其传递给 SimpleCacheManager 的在线文档。我如何做到这一点?

@Configuration
@EnableCaching
public class CacheConfig {

  @Bean
  public CacheManager cacheManager() {

    GuavaCache a =
        new GuavaCache("a", CacheBuilder.newBuilder().maximumSize(10000)
            .expireAfterAccess(24, TimeUnit.HOURS).recordStats().build());

    GuavaCache b =
        new GuavaCache("b", CacheBuilder.newBuilder().maximumSize(100)
            .expireAfterAccess(24, TimeUnit.HOURS).recordStats().build());

    GuavaCache c =
        new GuavaCache("c", CacheBuilder.newBuilder().maximumSize(100)
            .expireAfterAccess(24, TimeUnit.HOURS).recordStats().build());

    GuavaCache d =
        new GuavaCache("d", CacheBuilder.newBuilder().maximumSize(20)
            .expireAfterAccess(24, TimeUnit.HOURS).recordStats().build());

    GuavaCache e =
        new GuavaCache("e", CacheBuilder.newBuilder().maximumSize(100)
            .expireAfterAccess(24, TimeUnit.HOURS).recordStats().build());

    GuavaCache f =
        new GuavaCache("f", CacheBuilder.newBuilder().maximumSize(10)
            .expireAfterAccess(24, TimeUnit.HOURS).recordStats().build());

    GuavaCache g =
        new GuavaCache("g", CacheBuilder.newBuilder().maximumSize(5000)
            .expireAfterAccess(24, TimeUnit.HOURS).recordStats().build());

    SimpleCacheManager simpleCacheManager = new SimpleCacheManager();

    simpleCacheManager.setCaches(
      Arrays.asList(
        a,
        b,
        c,
        d,
        e,
        f,
        g
      )
    );

    return simpleCacheManager;
  }
}

【问题讨论】:

标签: java spring caching migration ehcache


【解决方案1】:

这不是它的工作方式。假设您将使用 Ehcache 3.x,它符合 JSR107。所以你将使用JCacheCacheManager。 Spring-boot 会在看到 classpath 中有 jcache api 时不做任何事情进行配置。

事实上,最简单的方法通常是让它做它并使用JCacheManagerCustomizer 来添加你想要的缓存。如下所示。

@Configuration
@EnableCaching
public class CacheConfig {

    @Bean
    public JCacheManagerCustomizer cacheManagerCustomizer() {
        return cm -> {
            cm.createCache("a", createConfiguration(100, Duration.ofHours(24)));
        };
    }

    private javax.cache.configuration.Configuration<Object, Object> createConfiguration(long size, Duration tti) {
        return Eh107Configuration.fromEhcacheCacheConfiguration(
            CacheConfigurationBuilder.newCacheConfigurationBuilder(Object.class, Object.class,
                ResourcePoolsBuilder.heap(size))
                .withExpiry(ExpiryPolicyBuilder.timeToIdleExpiration(tti))
                .build());
    }
}

【讨论】:

    猜你喜欢
    • 2018-11-14
    • 2020-11-18
    • 2022-01-25
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 2020-07-07
    • 2019-05-24
    • 1970-01-01
    相关资源
    最近更新 更多