今天發現了一個奇怪的問題,@Async 在某些地方不生效,不是異步的而是同步。(自己對Spring-Boot的@Async 注解不是很了解導致的)
大概代碼如下:
public void handData() throws InterruptedException { System.out.println("方法1"); asyneTask(); System.out.println("運行結束"); } @Async public void asyneTask() throws InterruptedException { Thread.sleep(1000); System.out.println("方法2"); }
程序執行的時候,永遠會等待【方法2】輸出,查了一下百度,大致的方法是缺少配置之類的,但是我這里顯然不是,因為其他的異步注解生效了,不過從以下博客或問答中發現了問題:
【博客】http://blog.didispace.com/springbootasync/
【問答】https://www.oschina.net/question/3070332_2269990
博客中,異步的方法調用是在另一個類里面,而我的這個是兩個方法都在同一個類里面,只是一個方法調用另一個異步方法,不生效。
解決方法就是拆分兩個方法,將異步方法單獨放在一個類里面,然后再去調用就解決了。具體參考【博客】鏈接。
如果錯漏歡迎指正。