zoukankan      html  css  js  c++  java
  • 使用@Cacheable注解时,Redis连不上,直接调用方法内部的解决方案

    最近redis 域名一致解析错误,导致业务多了很多异常。那么如何在这种情况下直接访问数据库,而不是报错呢

    1. 解决方案

    其实很简单,在配置 redis 时,只需要多一项配置,继承 CachingConfigurerSupport ,然后重写其 errorHandler 方法即可,代码如下:

    /**
         * 如果cache出错, 我们会记录在日志里,方便排查,比如反序列化异常
         */
        @Override
        public CacheErrorHandler errorHandler() {
            return new LoggingCacheErrorHandler();
        }
    
    static class LoggingCacheErrorHandler extends SimpleCacheErrorHandler {
    
            private final Logger logger = LoggerFactory.getLogger(this.getClass());
    
            @Override
            public void handleCacheGetError(RuntimeException exception, Cache cache, Object key) {
                logger.error(String.format("cacheName:%s,cacheKey:%s", cache == null ? "unknown" : cache.getName(), key), exception);
    //            super.handleCacheGetError(exception, cache, key);  不抛出错误,记录日志
            }
    
            @Override
            public void handleCachePutError(RuntimeException exception, Cache cache, Object key, Object value) {
                logger.error(String.format("cacheName:%s,cacheKey:%s", cache == null ? "unknown" : cache.getName(), key), exception);
    //            super.handleCachePutError(exception, cache, key, value);不抛出错误,记录日志
            }
    
            @Override
            public void handleCacheEvictError(RuntimeException exception, Cache cache, Object key) {
                logger.error(String.format("cacheName:%s,cacheKey:%s", cache == null ? "unknown" : cache.getName(), key), exception);
    //            super.handleCacheEvictError(exception, cache, key);不抛出错误,记录日志
            }
    
            @Override
            public void handleCacheClearError(RuntimeException exception, Cache cache) {
                logger.error(String.format("cacheName:%s", cache == null ? "unknown" : cache.getName()), exception);
    //            super.handleCacheClearError(exception, cache);不抛出错误,记录日志
            }
        }
    

    只要处理时不抛出错误,就会继续走下去,然后调用原方法体内。

    注意:错误仅仅打日志会让我们忽略,而异常我们是可以看得到的。所以,这种错误还是需要被感知,也就是需要给开发者发邮件通知,然后针对去处理

    2. 参考

    https://blog.csdn.net/l1028386804/article/details/82597154

  • 相关阅读:
    [笔迹]java范型
    转:APNS设置
    orientation in a UIView add to a UIWindow
    no password for ssh
    webservice soap
    set the region for all annotation
    iOS与Java服务器GZip压缩问题【转】
    useful commands for Mac / iOS
    textView使用总结
    总结(不断更新)
  • 原文地址:https://www.cnblogs.com/paxing/p/redis.html
Copyright © 2011-2022 走看看