我目前正在开发一个包含 Spring Data Redis 和 Spring Cache 的项目。在spring data redis中,我使用redis模板调用redis。我在 try catch 块中处理 redis 模板抛出的所有异常,如下所示:
try{
// execute some operation with redis template
}
catch(RedisCommandTimeoutException ex){
}
catch(RedisBusyException ex){
}
catch(RedisConnectionFailureException ex){
}
catch(Exception ex){
}
我可以使用类似的 try-catch 块来处理来自以下位置的异常吗@cacheable
?如何处理redis在可缓存中抛出的异常?
我相信你想定义自己的CacheErrorHandler
这将处理@Cachable
, @CachePut
, and @CacheEvict
.
您将定义CacheErrorHandler
:
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.Cache;
import org.springframework.cache.interceptor.CacheErrorHandler;
@Slf4j
public class CustomCacheErrorHandler implements CacheErrorHandler {
@Override
public void handleCacheGetError(RuntimeException e, Cache cache, Object o) {
log.error(e.getMessage(), e);
}
@Override
public void handleCachePutError(RuntimeException e, Cache cache, Object o, Object o1) {
log.error(e.getMessage(), e);
}
@Override
public void handleCacheEvictError(RuntimeException e, Cache cache, Object o) {
log.error(e.getMessage(), e);
}
@Override
public void handleCacheClearError(RuntimeException e, Cache cache) {
log.error(e.getMessage(), e);
}
}
然后注册它:
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.interceptor.CacheErrorHandler;
import org.springframework.context.annotation.Configuration;
@Configuration
public class CachingConfiguration extends CachingConfigurerSupport {
@Override
public CacheErrorHandler errorHandler() {
return new CustomCacheErrorHandler();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)