關于SpringBoot使用@Async的總結
SpringBoot使用@Async總結
注意事項:
如下方式會使@Async失效
1. 異步方法使用static修飾
2. 異步類沒有使用@Component注解(或其他注解)導致spring無法掃描到異步類
3. 異步方法不能與異步方法在同一個類中
4. 類中需要使用@Autowired或@Resource等注解自動注入,不能自己手動new對象
5. 如果使用SpringBoot框架必須在啟動類中增加@EnableAsync注解
6. 在Async 方法上標注@Transactional是沒用的。 在Async 方法調(diào)用的方法上標注@Transactional 有效。
SpringBoot實現(xiàn)異步(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

查看控制臺,發(fā)現(xiàn)異步task也成功執(zhí)行了!

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Spring init-method與destroy-method屬性的用法解析
這篇文章主要介紹了Spring init-method與destroy-method屬性的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08
基于visualvm監(jiān)控類實現(xiàn)過程詳解
這篇文章主要介紹了基于visualvm監(jiān)控類實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09
SpringBoot實現(xiàn)對超大文件進行異步壓縮下載的使用示例
在Web應用中,文件下載功能是一個常見的需求,本文介紹了SpringBoot實現(xiàn)對超大文件進行異步壓縮下載的使用示例,具有一定的參考價值,感興趣的可以了解一下,2023-09-09
Java?BasePooledObjectFactory?對象池化技術的使用
這篇文章主要介紹了Java?BasePooledObjectFactory?對象池化技術,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04

