从类内部调用 Spring @Async 方法

问题描述 投票:0回答:2

我有一个弹簧组件,它有一些方法,如

@Async

我想创建一个私有方法并运行

@Async
但是它不起作用,因为spring不帮助从bean中进行自我调用...

有没有一种简单的方法来允许特定的私有方法分配AOP @Async?或者只是更简单地获取线程池并手动执行?

spring aop spring-aop spring-async
2个回答
3
投票

不要在

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()

0
投票

您可以直接将任务提交给ThreadPoolTaskExecutor

这比将代理 bean 注入类本身更灵活,正如 @Yevgeniy 所建议的那样。对于查看您的代码的人来说,这可能不会那么令人困惑,但可能不那么干净。

© www.soinside.com 2019 - 2024. All rights reserved.