inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Lớp học thành thạo Kotlin thông qua thực hành dự án máy chủ ngân hàng

redisConfig 질문입니다

Đã giải quyết

110

woo

10 câu hỏi đã được viết

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

Câu trả lời 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

12

1

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

0

49

1

질문] 에러처리 관련 문의

0

72

2

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

0

85

2

강의 19] 질문입니다.

0

64

2

OkHttpClientConfig timeout 설정 질문

0

68

2

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

0

94

2

JDK 선택할 때 궁금점!!

0

109

3

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

0

83

1

access_token Db 저장건

0

82

2

data class 관련 질문입니다

0

80

2

TransactionMessage 질문

0

55

2

CompletableFuture 질문

0

86

3

스프링 빈 질문

1

88

2

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

0

246

2

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

0

338

3

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

0

140

1

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

0

126

1

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

0

196

1

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

0

191

2

카프카 컨슈머 구현 질문

0

157

2

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

0

216

2

와 이리 게시판이 조용하노

0

199

1

기기 관련 질문입니다!

0

223

2