我正在尝试更改以下方法以使用 EhCache 缓存而不是 Guava 缓存,因为 Guava 缓存已从 Spring 5.0 中删除。网上似乎没有任何关于如何简单地实例化 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;
}
}
最佳答案
事情不是这样的。假设您将使用 Ehcache 3.x,它符合 JSR107。因此您将使用JCacheCacheManager
。当看到 jcache api 在类路径中可用时,Spring-boot 将对其进行配置,而不执行任何操作。
事实上,最简单的方法通常是放手去做并使用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());
}
}
关于java - 从 GuavaCache 迁移到 EhCache (Spring Boot),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51599672/