我正在开发一个配置为使用 2 个缓存管理器 EhCache 和 RedisCache 的 SpringBoot 微服务,并且我正在尝试实现 CacheErrorHandler 来分别处理缓存错误。
根据reference ,似乎我只能定义一个处理所有类型缓存的 CacheErrorHandler 。
我可以知道有没有办法为不同的缓存管理器实现不同的 CacheErrorHandler ?
Redis 缓存管理器 Bean 配置:
@Bean
@Primary
@ConditionalOnBean(CustomCacheProperties.class)
public CacheManager redisCacheManager(RedisConnectionFactory connectionFactory, CustomCacheProperties customCacheProperties) {
return RedisCacheManager.builder(connectionFactory)
.cacheDefaults(RedisCacheConfiguration.defaultCacheConfig())
.withInitialCacheConfigurations(customCacheProperties.getInitialCacheConfigurations())
.build();
}
EhCache 缓存管理器 Bean 配置:
@Bean(name = "ehcache")
public CacheManager ehcacheManager() {
return new EhCacheCacheManager(ehCacheCacheManager().getObject());
}
引用:https://dzone.com/articles/safeguard-spring-app-from-cache-failure
最佳答案
这是一个老问题,但是当我用谷歌搜索同样的问题时,它就出现了,所以我想无论如何我都会给出答案。
据我所知,没有办法注册多个错误处理程序,但您可以根据缓存的类型区分错误处理,如下所示:
@Override
public void handleCacheGetError(RuntimeException exception, Cache cache, Object key) {
if (cache instanceof Ehcache) {
// ... handle EhCache failure
} else if (cache instanceof RedisCache) {
// ... handle Redis failure
} else {
// ... fallback
}
}
您需要检查您使用的缓存管理器,了解它们创建的缓存的实际类型。您还可以创建实现 CacheErrorHandler 的适当 bean,将它们注入(inject)到 Spring 注册的错误处理程序中,然后从那里委托(delegate),以正确分离逻辑。
关于spring - 如何为多个CacheManager创建多个CacheErrorHandler?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52624123/