欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

关于SpringBoot使用@Async的总结

程序员文章站 2022-03-06 13:01:03
目录springboot使用@async总结如下方式会使@async失效springboot实现异步(async)接口1. 启动类引入@enableasync注解2. 建立异步任务类3. 建立测试接口...

springboot使用@async总结

注意事项:

如下方式会使@async失效

1. 异步方法使用static修饰

2. 异步类没有使用@component注解(或其他注解)导致spring无法扫描到异步类

3. 异步方法不能与异步方法在同一个类中

4. 类中需要使用@autowired或@resource等注解自动注入,不能自己手动new对象

5. 如果使用springboot框架必须在启动类中增加@enableasync注解

6. 在async 方法上标注@transactional是没用的。 在async 方法调用的方法上标注@transactional 有效。

springboot实现异步(async)接口

1. 启动类引入@enableasync注解

@springbootapplication  
@enableasync  
public class application{    
    public static void main(string[] args) {  
        springapplication.run(application.class, args);  
    }  
}

2. 建立异步任务类

我们建了3个异步任务,分别延迟1s,2s,3s

@component
public class asynctask {
    @async
    public void task1() throws interruptedexception{
        long currenttimemillis = system.currenttimemillis();
        thread.sleep(1000);
        long currenttimemillis1 = system.currenttimemillis();
        system.out.println("task1任务耗时:"+(currenttimemillis1-currenttimemillis)+"ms");
    }
    @async
    public void task2() throws interruptedexception{
        long currenttimemillis = system.currenttimemillis();
        thread.sleep(2000);
        long currenttimemillis1 = system.currenttimemillis();
        system.out.println("task2任务耗时:"+(currenttimemillis1-currenttimemillis)+"ms");
    }
    @async
    public void task3() throws interruptedexception{
        long currenttimemillis = system.currenttimemillis();
        thread.sleep(3000);
        long currenttimemillis1 = system.currenttimemillis();
        system.out.println("task3任务耗时:"+(currenttimemillis1-currenttimemillis)+"ms");
    }
}

3. 建立测试接口

@restcontroller
@requestmapping("/test")
public class testcontroller {
    @autowired
    private asynctask asynctask;
    @requestmapping("/async")
    public string dotask() throws interruptedexception{
        long currenttimemillis = system.currenttimemillis();
        asynctask.task1();
        asynctask.task2();
        asynctask.task3();
        long currenttimemillis1 = system.currenttimemillis();
        return "task任务总耗时:"+(currenttimemillis1-currenttimemillis)+"ms";
    }
}

启动springboot服务,访问/test/async接口,能看到任务耗时只有1s

关于SpringBoot使用@Async的总结

查看控制台,发现异步task也成功执行了!

关于SpringBoot使用@Async的总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

相关标签: SpringBoot @Async