从 GuavaCache 迁移到 EhCache (Spring Boot)
Migrating from GuavaCache to EhCache (Spring Boot)
我正在尝试更改以下方法以使用 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
。 Spring-boot 会在类路径中看到 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());
}
}
我正在尝试更改以下方法以使用 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
。 Spring-boot 会在类路径中看到 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());
}
}