我有一个弹簧组件,它有一些方法,如
@Async
。
我想创建一个私有方法并运行
@Async
但是它不起作用,因为spring不帮助从bean中进行自我调用...
有没有一种简单的方法来允许特定的私有方法分配AOP @Async?或者只是更简单地获取线程池并手动执行?
不要在
this
上调用异步方法,而是注入 bean 并调用 bean 上的方法。这是一个例子:
public class MyService {
@Lazy
@Autowired
private MyService myService;
public void doStuff() throws Exception {
myService.doStuffAsync();
System.out.println("doing stuff sync.");
}
@Async
public void doStuffAsync() throws Exception {
TimeUnit.SECONDS.sleep(3);
System.out.println("doing stuff async.");
}
}
@Lazy
!myService.doStuffAsync()
而不是this.doStuffAsync()
您可以直接将任务提交给ThreadPoolTaskExecutor。
这比将代理 bean 注入类本身更灵活,正如 @Yevgeniy 所建议的那样。对于查看您的代码的人来说,这可能不会那么令人困惑,但可能不那么干净。