背景项目中,使用@Cacheable进行数据缓存。而这样的异常会导致服务不可用。原因分析我们是通过@EnableCaching进行缓存启用的,因此可以先看@EnableCaching的相关注释通过@EnableCaching的类注释可发现,spring cache的核心配置接口为:org.springframework.cache.annotation.CachingConfigurer该接口errorHandler方法可配置异常的处理方式。通过该方法上的注释可以发现,默认的CacheErrorHandler实现类是org.springframework.cache.interceptor.SimpleCacheErrorHandlerSimpleCacheErrorHandler类注释上说明的很清楚:对cache的异常不做任何处理,直接将该异常抛给客户端。因此默认的情况下,redis服务器异常后,直接就阻断了正常业务解决方案通过上面的分析可知,我们可以通过自定义CacheErrorHandler来干预@Cacheable的异常处理逻辑。

Spring @Cacheable redis异常不影响正常业务方案

Spring @Cacheable redis异常不影响正常业务方案

Spring @Cacheable redis异常不影响正常业务方案

Spring @Cacheable redis异常不影响正常业务方案

Spring @Cacheable redis异常不影响正常业务方案

Spring @Cacheable redis异常不影响正常业务方案