业务场景: 在Spring Boot
项目中使用了@Cacheable
注解实现往Redis
中存入数据库查询数据和读取缓存数据,如果由于一些原因Redis
无法连接的话,那么@Cacheable
标注的方法则会报错且无法返回数据。需要在Redis
无法连接的情况下让方法直接请求数据库。
解决方法: 添加Redis
配置类继承CachingConfigurerSupport
类,重写errorHandler
方法即可。
代码如下:
@Slf4j
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
/**
* 配置当redis连接不上时被缓存注解标注的方法绕过Redis
*/
@Bean
@Override
public CacheErrorHandler errorHandler() {
CacheErrorHandler cacheErrorHandler = new CacheErrorHandler() {
@Override
public void handleCachePutError(RuntimeException exception, Cache cache, Object key, Object value) {
log.error("redis异常:key=[{}]", key, exception);
}
@Override
public void handleCacheGetError(RuntimeException exception, Cache cache, Object key) {
log.error("redis异常:key=[{}]", key, exception);
}
@Override
public void handleCacheEvictError(RuntimeException exception, Cache cache, Object key) {
log.error("redis异常:key=[{}]", key, exception);
}
@Override
public void handleCacheClearError(RuntimeException exception, Cache cache) {
log.error("redis异常:", exception);
}
};
return cacheErrorHandler;
}
}