Cộng đồng Hỏi & Đáp của Inflearn
redisConfig 질문입니다
Đã giải quyết
Viết
·
99
0
package org.example.config
import org.redisson.Redisson
import org.redisson.api.RedissonClient
import org.redisson.config.Config
import org.springframework.beans.factory.annotation.Value
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.context.annotation.Primary
import org.springframework.data.redis.connection.RedisConnectionFactory
import org.springframework.data.redis.connection.RedisStandaloneConfiguration
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.serializer.Jackson2JsonRedisSerializer
import org.springframework.data.redis.serializer.StringRedisSerializer
import java.time.Duration
@Configuration
class RedisConfig {
@Bean
fun redisConnectionFactory(
@Value("\${database.redis.host}") host: String,
@Value("\${database.redis.port}") port: Int,
@Value("\${database.redis.password:${null}}") password: String?,
@Value("\${database.redis.database:${0}}") database: Int,
@Value("\${database.redis.timeout:${10000}}") timeout: Long,
) : LettuceConnectionFactory {
val config = RedisStandaloneConfiguration(host, port).apply {
password?.let { setPassword(it) }
setDatabase(database)
}
val clientConfig = LettuceClientConfiguration.builder()
.commandTimeout(Duration.ofSeconds(timeout))
.build()
return LettuceConnectionFactory(config,clientConfig)
}
@Bean
@Primary
fun redisTemplate(connectionFactory : RedisConnectionFactory): RedisTemplate<String, String> {
val template = RedisTemplate<String, String>()
template.connectionFactory = connectionFactory
template.keySerializer = StringRedisSerializer()
template.valueSerializer = Jackson2JsonRedisSerializer(String::class.java)
template.hashKeySerializer = StringRedisSerializer()
template.hashValueSerializer = Jackson2JsonRedisSerializer(String::class.java)
template.afterPropertiesSet()
return template
}
@Bean
fun redissonClient(
@Value("\${database.redisson.host}") host: String,
@Value("\${database.redisson.timeout}") timeout: Int,
@Value("\${database.redisson.password:${null}}") password: String?,
) : RedissonClient {
val config = Config()
val singleServerConfig = config.useSingleServer()
.setAddress(host)
.setTimeout(timeout)
if (!password.isNullOrBlank()) {
singleServerConfig.setPassword(password)
}
return Redisson.create(config).also {
println("redisson create success")
}
}
}An annotation argument must be a compile-time constant
와 같은 에러가 나는데 강의 파일 코드로도 같은 에러가 납니다
kotlinmysqlmongodbkafkaredis
Câu trả lời 1
0
Hong
Người chia sẻ kiến thức
공유해주셔서 감사합니다.
코드상의 오타가 있었네요 현재
redisConnectuonFactory 함수에서의 password에 문제가 있습니다.Kotlin에서 ${null}에 대해서 런타임에서는 표현식으로 인식하기 때문에 컴파일 에러가 발생을 하는것입니다.
그냥 간단하게 {database.redis.password:} 로 수정하신다면 문제가 해결되는것으로 보입니다!!





현재 build.gradle.kts의 정보는 다음과 같습니다