gpt4 book ai didi

spring - 如何为多个CacheManager创建多个CacheErrorHandler?

转载 作者:行者123 更新时间:2023-12-03 06:46:46 25 4
gpt4 key购买 nike

我正在开发一个配置为使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com