Většinou není problém s připojením k redis databázi. Ani když používáte docker image a contejner s redisem zastavíte. Po jeho spuštění se aplikace zase korektně připojí do redis databáze. Měl jsem ale problém v případě kubernetu, kdy po znovu nasazení a spuštění docker kontejneru s redisem se aplikace nemohla sama připojit. Řešením bylo udělat health actuator a v případě, že je down, aplikaci restartovat. Jako klienta používám redisson.
import org.redisson.api.RedissonClient
import org.slf4j.LoggerFactory
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.boot.actuate.health.Health
import org.springframework.boot.actuate.health.ReactiveHealthIndicator
import org.springframework.stereotype.Component
import reactor.core.publisher.Mono
@Component
class RedisHealthChecker : ReactiveHealthIndicator {
private val log = LoggerFactory.getLogger(RedisHealthChecker::class.java)
@Autowired
lateinit var redissonClient: RedissonClient
override fun health(): Mono {
return try {
val bucket = redissonClient.getBucket("healthBucket")
bucket.set("Ok")
Mono.just(Health.Builder().up().build())
} catch (e: Exception) {
log.error("Error in redis connection", e)
Mono.just(Health.Builder().down().build())
}
}
}