首页 > 解决方案 > Spring Framework 3 中的 Starter 异步类

问题描述

如何在 spring fw 3 中创建一个从部署开始并异步运行的类?

我需要在这个类中做一个“while(true)”来使用 Kafka 主题,但目前该循环不是异步的并且没有完成,并且 war 文件没有完成部署。

我尝试在 web.xml 中使用“listener-class”和“servlet”。

任何想法?

标签: springasynchronousapache-kafkalistener

解决方案


listener-class 和 servlet 部分都是 web 规范,与 spring 无关。特别是它们不受 spring 管理,不受应用程序上下文生命周期的约束,没有注入等等。它们基本上是由 web servlets 容器管理和调用的(比如你在设置中拥有的 tomcat 或 jetty)

一般来说,你需要了解两个概念:

  1. 侦听器 - 这些是在应用程序上下文加载的不同时间被调用的东西(你需要在应用程序上下文“准备好”之前加载应用程序上下文时被调用的东西)——所有的 bean 都被创建、注入,所以你可以开始消费来自那里的卡夫卡消息。

从技术上讲,侦听器是一个 bean,因此您可以注入 kafka 定义(我知道您不使用任何 spring kafka 集成并“手动”定义所有内容)...

  1. @Async方法。简而言之,这些是spring可以“卸载”到某个线程池的方法,这样它们就不会干扰启动应用程序上下文的主线程。如果由于某种原因在您的 Spring 版本中不支持异步方法 - 您可以自己定义一个线程池并“提交”一个在无限循环中执行 kafka 轮询的类。

因此,总而言之,您需要一个带有 async 注释的侦听器 + 为您的应用程序启用异步支持。

一些可能会派上用场的链接:

异步教程

监听器和事件教程


推荐阅读