inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

은행 서버 프로젝트 실습을 통해 배우는 코틀린 마스터 클래스

redisConfig 질문입니다

해결된 질문

107

woo

작성한 질문수 10

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")
        }
    }


}

와 같은 에러가 나는데 강의 파일 코드로도 같은 에러가 납니다

kotlin mysql mongodb kafka redis

답변 1

0

Hong

woo님 안녕하세요 질문 남겨주셔서 감사합니다!

혹시 컴파일 하실 떄 사용하시는 java 버전 정보를 알 수 있을까요??

0

woo

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

 

plugins {
    id("org.springframework.boot") version "3.2.2"
    id("io.spring.dependency-management") version "1.1.4"
    kotlin("jvm") version "1.9.22"
    kotlin("plugin.spring") version "1.9.22"
    kotlin("plugin.jpa") version "1.9.22"
    kotlin("plugin.serialization") version "1.8.0"
}

tasks.test {
    useJUnitPlatform()
}
kotlin {
    jvmToolchain(17)
}

3

Hong

공유해주셔서 감사합니다.

코드상의 오타가 있었네요 현재

redisConnectuonFactory 함수에서의 password에 문제가 있습니다.

Kotlin에서 ${null}에 대해서 런타임에서는 표현식으로 인식하기 때문에 컴파일 에러가 발생을 하는것입니다.

 

그냥 간단하게 {database.redis.password:} 로 수정하신다면 문제가 해결되는것으로 보입니다!!

 

2

woo

확인했습니다! 말씀대로 {database.redis.password:}로 바꾸니 잘 대입되는군요

라이브 운영중인 환경의 테이블에 인덱스 추가시 고려사항

0

21

2

강의가 검은 화면으로 나옵니다.

0

42

1

질문] 에러처리 관련 문의

0

70

2

강의_34] 공통 모듈 관련 질문입니다.

0

82

2

강의 19] 질문입니다.

0

60

2

OkHttpClientConfig timeout 설정 질문

0

64

2

Kotlin data class 엔티티에서 copy로 수정 후 save하는 이유가 있을까요?

0

91

2

JDK 선택할 때 궁금점!!

0

107

3

혹시 어플리케이션을 실행할 수 있게 readme 같은건 따로 없나요?

0

81

1

access_token Db 저장건

0

82

2

data class 관련 질문입니다

0

79

2

TransactionMessage 질문

0

52

2

CompletableFuture 질문

0

85

3

스프링 빈 질문

1

86

2

SpringBoot + Kotlin에서 Redis 캐싱 사용 관련되서 여쭤봐도 될까요?

0

241

2

entity 객체 생성을 data class 로 하신 이유가 있을까요?

0

331

3

return@logFor을 사용한 이유가 궁금합니다.

0

138

1

@Transactional.kt에 대한 효용성 질문

0

124

1

@Transactional.kt에 대한 효용성 질문

0

194

1

class 가 아닌 파일로 생성하시는이유

0

188

2

카프카 컨슈머 구현 질문

0

154

2

DDL문 정리되어 있는 파일 있을까요?

0

212

2

와 이리 게시판이 조용하노

0

192

1

기기 관련 질문입니다!

0

218

2