当前位置: 首页 > 知识库问答 >
问题:

@Spring中的Async在服务类中不起作用?

景麒
2023-03-14

独立的Spring Boot应用程序中的@Service注释类中的@Async方法不能异步运行。我做错了什么?

@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) {
        //
    }

}

共有1个答案

左丘宜年
2023-03-14

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

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

 类似资料:
  • 问题内容: 一个在方法-annotated类不被异步调用-它阻塞线程。 我已经进入配置,对方法的调用来自类外部,因此应该点击代理。当我单步执行代码时,确实会碰到代理,但似乎没有在与在任务执行器中运行相关的任何类附近的任何地方。 我已经设置了断点,但是它们从未被击中。我已经调试过,可以看到建议得到应用。 该服务被定义为接口(该接口的方法带有适当的注释),实现的方法也带有注释。都没有标记。 任何想法可

  • 问题内容: 我只是用iOS 11 SDK重建了我的应用程序,试图删除现在总是出现的应用程序。我以为“很棒,那很成功”,只是发现定位服务现在根本无法正常工作。 该应用程序过去曾与iOS 10配合使用-有人听到了吗? 问题答案: 看来苹果已经添加了另一个隐私功能。用户现在可以覆盖我们并将其降级为-这意味着作为开发人员,我们现在必须在 我发现他们已经添加了新密钥 但是,使用此新密钥后,位置服务仍然无法正

  • 问题内容: 我有这个Docker Compose配置,我只需创建一个NodeJS容器并在其中安装Angular CLI。 之后,我可以使用SSH在容器内进行SSH 。可以正常工作,但似乎不起作用。它已正确启动,控制台中没有错误。但是,如果我访问(我将端口4200映射到80),则不会加载任何内容。 我想念什么吗? 问题答案: 在您的Dockerfile中,您缺少Expose行,例如: 尝试将其放在d

  • 请说出这段代码有什么问题。

  • 我一定错过了一些简单的东西,但是我很难将Autowired属性分配给bean。这里贴出的所有类似答案似乎都围绕着三种解决方案之一: null 我试图制作一个最简的bean来表示我的DAO并将其注入到Web服务中。 DAO接口: DAO实现: 我错过了什么?

  • 我做了一个名为AcessoCliente的单例类 但我需要对我的单例类执行一个名为ValidadorNivelDeAcessoBusiness的类的依赖注入