使用@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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM