Cache Fehler zu Logging statt Runtime-Exception umwandeln

Wenn der Cache (z. B. Redis) nicht erreichbar ist, sorgt das dafür das entsprechend eine Exception fliegt. wenn der Cache aber nur zur Beschleunigung dient, reicht in dem Fall das Logging.

Folgendes muss dafür konfiguriert werden:

// Via Konfiguration Error Handler festlegen, den Rest mit null zurückgeben, 
//damit zieht hier der Default bzw. der entsprechend konfigurierte Cache
@Configuration
class CacheConfig : CachingConfigurer {
    override fun cacheManager(): CacheManager? = null

    override fun keyGenerator(): KeyGenerator? = null

    override fun cacheResolver(): CacheResolver? = null

    override fun errorHandler(): CacheErrorHandler? = CustomCacheErrorHandler()
}

// Error Handler, dieser muss den CacheErrorHandler implementieren,
// hier kann entsprechend die Exception umgemodelt oder einfach nur geloggt 
// oder gar ignoriert werden
class CustomCacheErrorHandler : CacheErrorHandler {
    private val log = LoggerFactory.getLogger(CustomCacheErrorHandler::class.java)

    override fun handleCacheGetError(exception: RuntimeException, cache: Cache, key: Any) =
            log.error("Error getting key '$key' from cache '${cache.name}'", exception)

    override fun handleCacheClearError(exception: RuntimeException, cache: Cache) =
            log.error("Error clearing cache ${cache.name}", exception)

    override fun handleCachePutError(exception: RuntimeException, cache: Cache, key: Any, value: Any?) =
            log.error("Error putting value '$value' into key '$key' into cache '${cache.name}'", exception)

    override fun handleCacheEvictError(exception: RuntimeException, cache: Cache, key: Any) =
            log.error("Error evicting key '$key' from cache '${cache.name}'", exception)

}