sodalive-backend-spring-boot/src/main/kotlin/kr/co/vividnext/sodalive/configs/ValkeyConfig.kt

61 lines
2.3 KiB
Kotlin

package kr.co.vividnext.sodalive.configs
import org.springframework.beans.factory.annotation.Value
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.ComponentScan
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.FilterType
import org.springframework.data.redis.connection.RedisClusterConfiguration
import org.springframework.data.redis.connection.RedisConnectionFactory
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory
import org.springframework.data.redis.core.RedisTemplate
import org.springframework.data.redis.core.StringRedisTemplate
import org.springframework.data.redis.repository.configuration.EnableRedisRepositories
import java.time.Duration
@Configuration
@EnableRedisRepositories(
basePackages = ["kr.co.vividnext.sodalive.redis.v2"],
redisTemplateRef = "valkeyTemplate",
excludeFilters = [
ComponentScan.Filter(
type = FilterType.ASSIGNABLE_TYPE,
classes = [org.springframework.data.jpa.repository.JpaRepository::class]
)
]
)
class ValkeyConfig(
@Value("\${spring.valkey.host}")
private val host: String,
@Value("\${spring.valkey.port}")
private val port: Int
) {
@Bean(name = ["valkeyConnectionFactory"])
fun valkeyConnectionFactory(): RedisConnectionFactory {
val clusterConfig = RedisClusterConfiguration()
clusterConfig.clusterNode(host, port)
val clientConfig = LettuceClientConfiguration.builder()
.commandTimeout(Duration.ofSeconds(5))
.shutdownTimeout(Duration.ofSeconds(5))
.useSsl()
.disablePeerVerification()
.build()
return LettuceConnectionFactory(clusterConfig, clientConfig)
}
@Bean(name = ["valkeyTemplate"])
fun valkeyTemplate(): RedisTemplate<*, *> {
val redisTemplate: RedisTemplate<*, *> = RedisTemplate<Any, Any>()
redisTemplate.setConnectionFactory(valkeyConnectionFactory())
return redisTemplate
}
@Bean(name = ["valkeyStringRedisTemplate"])
fun valkeyStringRedisTemplate(): StringRedisTemplate {
return StringRedisTemplate(valkeyConnectionFactory())
}
}