gpt4 book ai didi

java - Spring中的@Async在Service类中不起作用?

转载 作者:行者123 更新时间:2023-12-02 08:46:11 24 4
gpt4 key购买 nike

独立 Spring Boot 应用程序中 @Service 注释类中的

@Async 方法不会异步运行。我做错了什么?

当我直接从主类运行相同的方法(@SpringBootApplication 注解)时,它可以工作。示例:

主类

@SpringBootApplication
@EnableAsync
public class Application implements CommandLineRunner {

@Override
public void run(String... args) throws Exception {
// here when I call downloadAnSave() it runs asynchronously...
// but when I call downloadAnSave() via downloadAllImages() it does not run asynchronously...
}

}

和我的服务类(这里异步行为不起作用):

@EnableAsync
@Service
public class ImageProcessorService implements IIMageProcessorService {

public void downloadAllImages(Run lastRun) {
// this method calls downloadAnSave() in loop and should run asynchronously....
}

@Async
@Override
public boolean downloadAnSave(String productId, String imageUrl) {
//
}

}

最佳答案

从同一个类中调用异步方法将触发原始方法,而不是拦截的方法。您需要使用异步方法创建另一个服务,并从您的服务中调用它。

Spring 为您使用通用注释创建的每个服务和组件创建一个代理。只有那些代理包含由方法注释(例如 Async)定义的所需行为。因此,不通过代理而是通过原始裸类调用这些方法不会触发这些行为。

关于java - Spring中的@Async在Service类中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40042505/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com