加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 05:26:50 所属栏目:Java 来源:网络整理
导读:我想在tomcat服务器启动时启动守护进程邮件服务线程.所以我用@Async注释注释了一个方法. 我有一个实现ApplicationListener接口的类.当我从这个类中调用async方法时,它不会异步启动并阻止当前线程.而当我从spring控制器类中调用异步方法时,它永远不会阻止并异
我想在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();
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读