java – 如何在春天启动服务器启动守护进程

前端之家收集整理的这篇文章主要介绍了java – 如何在春天启动服务器启动守护进程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在tomcat服务器启动时启动守护进程邮件服务线程.所以我用@Async注释注释了一个方法.

我有一个实现ApplicationListener接口的类.当我从这个类中调用async方法时,它不会异步启动并阻止当前线程.而当我从spring控制器类中调用异步方法时,它永远不会阻止并异步启动.

为什么async方法从一个类而不是另一个类成功执行?

我做错了什么,如何在服务器启动时执行异步方法

提前致谢.

编辑:嗨,我试过使用InitializingBean接口,@PostConstruct,init方法调用我的异步方法,但是它从未执行过.然后我意识到,我的默认lazy-init是真的,所以我的lazy-init为我的InitializingBean为false.现在它执行我的asnyc方法,但它阻止当前线程,现在还有一个问题,我正在面对的是我的服务器没有优雅地停止,但是我必须强制停止我的服务器.

解决方法

首先你不需要实现ApplicationListener接口.你正在使用 Spring – 应用程序的上下文就足够了.

第二,你正在谈论Spring @Async,这意味着你的任务应该从应用程序上下文启动,而控制器bean是其中的一部分.

你需要确保你有<注释驱动>在你的spring xml文件中.

您可以在@PostConstruct函数中启动您的任务:

@Component
public class SampleBeanImpl implements SampleBean {

  @Async
  void doSomething() { … }
}


@Component
public class SampleBeanInititalizer {

  @Autowired
  private final SampleBean bean;

  @PostConstruct
  public void initialize() {
    bean.doSomething();
  }
}

猜你在找的Java相关文章