gpt4 book ai didi

java - Kotlin 中的 Spring 服务初始化流程

转载 作者:行者123 更新时间:2023-12-02 09:31:34 34 4
gpt4 key购买 nike

我正在尝试在 Spring/Kotlin 中编写一个简单的 Redis 接口(interface)服务,但在理解属性的初始化方式方面遇到了一些困难。

application.properties 文件指定 Redis 的 redis.hostredis.port 值。然后我想设置一个 RedisClientStatefulRedisConnection 对象以在内部与辅助函数一起使用。

我的问题是,虽然当我运行时编译它,但我得到:

@Service
class RedisService {

@Value("\${redis.host}")
private val host: String = "localhost"

@Value("\${redis.port}")
private val port: Int = 6379

private val log = LoggerFactory.getLogger(this::class.java)

private lateinit var client: RedisClient
private lateinit var connection: StatefulRedisConnection<String, String>

@PostConstruct
private fun setupConnection() {

log.info("Creating connection to: [redis://$host:$port]")
client = RedisClient.create(
RedisURI.create("redis://$host:$port")
)
connection = client.connect()
}
}

kotlin.UninitializedPropertyAccessException: lateinit property connection has not been initialized

设置需要“以编程方式”构建的属性的正确方法是什么。它们是否需要是带有 @Bean 注释或类似内容的函数?

感谢您提供的任何帮助。

最佳答案

这样的事情要好得多:

@Configuration
class RedisConfig {
@Bean
fun getRedisConnection(
@Value("\${redis.host}") host: String,
@Value("\${redis.port}") port: String) = RedisClient.create(RedisURI.create("redis://$host:$port")).connect()
}

@Service
class RedisService(private val connection: StatefulRedisConnection<String?,String?>) {
private val log = LoggerFactory.getLogger(this::class.java)

fun useConnection() {
// use connection here
}
}

关于java - Kotlin 中的 Spring 服务初始化流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57915821/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com