我想在tomcat服务器启动时启动一个守护进程邮件服务线程.所以,我用@Async注释注释了一个方法.
我有一个实现ApplicationListener接口的类.当我从这个类调用我的异步方法时,它永远不会异步启动并阻塞当前线程.当我从spring控制器类调用我的异步方法时,它永远不会阻塞并异步启动.
为什么异步方法从一个类成功执行而不是从另一个类执行?
我做错了什么以及如何在服务器启动时执行我的异步方法?
提前致谢.
编辑:嗨大家好,我尝试使用InitializingBean接口,@ PostConstruct,init-method方法来调用我的异步方法,但它从未执行过.然后我意识到,我的默认lazy-init是真的,所以我将我的InitializingBean的lazy-init设为false.现在它执行我的asnyc方法,但它阻止了当前线程,现在还有一个问题,我面临的是我的服务器没有正常停止,但我必须强行停止我的服务器.
dan*_*nik 13
首先,您不需要实现ApplicationListener
接口.您正在使用Spring - 应用程序上下文就足够了.
其次,你在谈论Spring @Async
,这意味着你的任务应该从Application Context启动,而Controller bean也是它的一部分.
您需要确保<annotation-driven>
在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();
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15217 次 |
最近记录: |