对于我的Spring Boot Web应用程序,在应用程序启动后,我想调用一个类的方法以使其保持运行状态,直到应用程序关闭为止。例如,方法的逻辑是消耗Kafka消息(长时间轮询)。
所以我最终得到了以下代码。 可以,但是我正在寻找更简单或更优雅的方法。
@Component
class KafkaConsumerService : ApplicationRunner {
private lateinit var kafkaConsumer: KafkaConsumer<String, String>
init {
val props = Properties()
props[ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG] = "127.0.0.1:9092"
props[ConsumerConfig.GROUP_ID_CONFIG] = "AnotherDemoConsumer"
props[ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG] = StringDeserializer::class.java.name
props[ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG] = StringDeserializer::class.java.name
kafkaConsumer = KafkaConsumer(props)
}
override fun run(args: ApplicationArguments?) {
receiveFromKafka()
}
fun receiveFromKafka() {
kafkaConsumer.subscribe(listOf("test-topic"))
while (true) {
val consumerRecords = kafkaConsumer.poll(3000)
consumerRecords.forEach { record ->
logger.info("Receive Kafka message having key: ${record.key()}, value: ${record.value()}, " +
"partition: ${record.partition()}, offset: ${record.offset()}")
}
}
}
}
对于上述代码,我必须实现ApplicationRunner接口,然后重写run方法。
是否可以使用其他一些Spring引导功能而无需使用while
循环或诸如调度程序之类的东西?
答案 0 :(得分:0)
使用<div class="container">
<ul>
<li>Variable</li>
<li>Width</li>
<li>Content</li>
<li>Do not collapse long text</li>
</ul>
</div>
打开spring的调度功能。可以通过@EnableShceduling