我正在开发配置为使用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
答案 0 :(得分:0)
这是一个古老的问题,但是当我用同样的问题搜索时出现了,所以以为我仍然会给出答案。
据我所知,无法注册多个错误处理程序,但是您可以根据缓存的类型来区分错误处理,如下所示:
@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,将它们注入到Spring注册的错误处理程序中,然后从那里进行委派,以正确地分离逻辑。