接到一个奇怪的需求,研发总监让我给我的溯源算法加一个线程,目的就是为了让前端知道请求成功了。可是我明明数据库会创建一条任务数据,我在写个后端接口不就好了吗?让他读后端接口去看是否成功就行,但是他说,这样前端很麻烦,那我。。。只能写个线程,当他请求成功了,就返回200,剩下的让线程自己去跑。谁让前端是个漂亮的妹子呢,可是有男朋友了。不然肯定能和她成为好朋友的。好了,接下来说正事。
基础知识
springBoot这个玩意儿,有一个BaseApplication的启动类,你不配置,它肯定也不会开启异步线程,谁没事开一堆东西,增加自己的内耗,所以和我们项目一样,需要的东西,我才会引入,springBoot也是如此。开启完成后,肯定要告诉你写的方法,让哪个方法作为单独的线程异步进行运行。springBoot的指令一般都是注解,这个也不例外。
那么你现在肯定也清晰了一些,知道接下来要做什么事情。
首先开启注解
在application的【类上面】加一个注解@EnableAsync
然后在你想要异步的方法上加一个@Async
代表他是异步
最后在主函数中调用即可。(不得不说,springBoot真的很方便,2个注解就完成了异步)
瞬间返回200,并且查看日志,日志还在执行程序
最简单的异步
//异步执行,代码里把new Worker改成你的方法
new Thread(()->{
try {
Thread.sleep(5000);
new Worker(jsonRequestParam,runMapper).run();
} catch (InterruptedException e) {
}
}).start();