前提条件:
项目基础:SpringBoot
如何使用:
第一步:要先开启异步支持 在启动类上加上注解 @EnableAsync
@EnableAsync
public class XXXApplication{
public static void main(String[] args){
SpringApplication.run(XXXApplication.class, args);
}
}
第二步:直接在方法上边加上注解
@Async
public void test(){
System.out.println("===============");
}
这里记录一下自己遇到的一个问题:
我有三个模块 A B C 其中A 通过feign 调用 B中方法 B在异步调用feign C中的方法。
这个时候 ,B调用C的过程中就出现的了问题,主线程的Header 信息 无法传递到子线程中
导致B调用C的时候失败了。
我的线程实现方式是 自己创建了一个线程池 然后用Callable<Object> (有放回的异步)
class ReportData implements Callable<Object>{
@Override
public Object call() throws Exception {
(省略。。。)
}
问题:debug了一下,应该是请求头部的数据没有传递到子线程中。比如我的uuid 就一直是null
最后简单粗暴的直接用spring自带的@Async就可以了,果然还是我学艺不精