Java 开发中常用@Async实现异步线程调用,以优化接口性能。
但是@Async存在一个问题:子线程的请求头丢失,在本服务没有问题,一旦跨服务,请求头丢失就会发生一系列报错
上代码:
如代码所示,此处使用了@Async实现异步
其中build方法使用fegin调用外部接口
报错信息:
报75行空指针,也就是build方法所在。
跟着报错提示,我们点开看下具体是什么报错
可以看到是getHeaders()方法报了空指针,也就是说请求头丢失
下面来说说解决办法:
1.将当前线程的请求信息给子线程
2.将请求头设置为子线程共享