今天发现了一个奇怪的问题,@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
博客中,异步的方法调用是在另一个类里面,而我的这个是两个方法都在同一个类里面,只是一个方法调用另一个异步方法,不生效。
解决方法就是拆分两个方法,将异步方法单独放在一个类里面,然后再去调用就解决了。具体参考【博客】链接。
如果错漏欢迎指正。