@Async不适合我

我正在使用@Scheduled,它一直工作正常,但无法让@Async工作。 我测试了很多次,似乎它使我的方法异步。 我还缺少其他任何东西,配置或参数吗? 我有一个有两个方法的类,一个用@Scheduled标记的方法,执行并调用第二个用@Async标记的方法。

这是我的配置:

                 

谢谢。

当您从同一对象中的另一个方法调用@Async方法时,您可能绕过异步代理代码并只调用普通方法,即在同一个线程内。

解决此问题的一种方法是确保调用@Async方法来自另一个对象。 请参阅本文末尾的评论: http : //groovyjavathoughts.blogspot.com/2010/01/asynchronous-code-with-spring-3-simple.html

但是这样做很麻烦,所以你可以自动assemblyTaskScheduler,将你的方法包装在Runnable中并自己执行。

我遇到了类似的问题。 我花了很多时间来解决它。

如果使用spring-context 3.2 ,还需要在调用方法服务注释@Async的类上添加@EnableAsync

看看http://spring.io/guides/gs/async-method/#initial

我希望它会对你有所帮助。

这是对已接受的答案的补充答案。 您可以在自己的类中调用异步方法,但必须创建自引用bean。

这里唯一的副作用是你不能在构造函数中调用任何异步代码。 这是一种将代码保存在同一个地方的好方法。

 @Autowired ApplicationContext appContext; private MyAutowiredService self; @PostConstruct private void init() { self = appContext.getBean(MyAutowiredService.class); } public void doService() { //This will invoke the async proxy code self.doAsync(); } @Async public void doAsync() { //Async logic here... } 

您可以在服务中使用@EnableAsync