簡體   English   中英

應用程序啟動后的Spring Boot長期運行方法

[英]Spring boot long run method after application starts

對於我的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方法。

是否可以在不使用while循環或諸如Scheduler之類的情況下使用其他一些Spring Boot功能?

使用@EnableShceduling打開spring的調度功能。 輪詢可以通過@Scheduled(3000)注釋的方法來完成

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM