程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了服务中的Spring @Async方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决服务中的Spring @Async方法?

开发过程中遇到服务中的Spring @Async方法的问题如何解决?下面主要结合日常开发的经验,给出你关于服务中的Spring @Async方法的解决方法建议,希望对你解决服务中的Spring @Async方法有所启发或帮助;

我解决了第三个方法(将其分为两个Bean),将Async方法修改器切换为

@service
public class Myservice {
    @autowired
    MyAsyncservice myAsyncservice;
    public worker(){
        myAsyncservice.asyncJob();
    }
}

@service
public class MyAsyncservice {

    @Async
    public asyncJob(){ // switched to public
        ...
    }

}

解决方法

我的service Bean带有一个同步方法,该同步方法调用了内部异步方法:

@service
public class Myservice {

    public worker(){
        asyncJob();
    }

    @Async
    asyncJob(){
        ...
    }

}

问题在于asyncJob并不是真的以异步方式调用。我发现这是行不通的,因为内部调用会跳过 AOP代理

因此,我尝试 自引用 Bean:

@service
public class Myservice {

    Myservice mySelf;
    @Autowired
    ApplicationContext cnt;
    @PostConstruct
    public init(){
        mySelf=(MyservicE)cnt.getBean("myservice");
    }


    public worker(){
        mySelf.asyncJob();
    }

    @Async
    asyncJob(){
        ...
    }

}

它失败了 。再次没有异步调用。

因此,我尝试 将其 分为两个bean:

@service
public class Myservice {
    @Autowired
    MyAsyncservice myAsyncservice;
    public worker(){
        myAsyncservice.asyncJob();
    }
}

@service
public class MyAsyncservice {

    @Async
    asyncJob(){
        ...
    }

}

再次失败

唯一的工作方法是从 Controller Bean 调用它:

@Controller
public class MyController {
    @Autowired
    MyAsyncservice myAsyncservice;
    @requestMapping("/test")
    public worker(){
        myAsyncservice.asyncJob();
    }
}

@service
public class MyAsyncservice {

    @Async
    public asyncJob(){
        ...
    }

}

但是在这种情况下,这是一项服务工作……为什么我不能从服务中调用它?

大佬总结

以上是大佬教程为你收集整理的服务中的Spring @Async方法全部内容,希望文章能够帮你解决服务中的Spring @Async方法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。