This tutorial will walk you through the steps to implement custom error handler and fail-safe caching in Spring applications

By default, SimpleCacheErrorHandler is used and simply throws the exception back to the client. However, in practice, failing to retrieve an object from the cache, due to connection issues or cache infrastructure goes down, should not affect the main functioning. Spring provides CacheErrorHandler interface, a cache error handler strategy for you to handling those circumstances

Implement CacheErrorHandler interface

The CacheErrorHandler interface provides 4 methods including handleCacheGetError, handleCachePutError, handleCacheEvictError and handleCacheClearError to handle errors thrown by @Cachable, @CachePut, and @CacheEvict

The following gives you a CacheErrorHandler implementation example


CustomCacheErrorHandler logs the error for further investigation instead of throwing back to the client

Register the custom CacheErrorHandler

You can implement CachingConfigurer interface or extend from CachingConfigurerSupport class to register the custom CacheErrorHandler

The following give you an example with CachingConfigurerSupport

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();
    }
}


Testing

Try to stop your Redis test server while running the application and compare the differences between the default and custom error handler for Spring Cache


Conclusion

In this tutorial, we walk through the steps to implement fail-safe caching in Spring applications. You can find the full source code at https://github.com/hellokoding/hellokoding-courses/tree/master/springboot-examples/springboot-caching-redis