Spirngboot使用@Async异步调用,出现不异步问题。

问题背景:做项目记日志时候,由于日志量较大,为了不影响业务处理速度,采用异步记日志的方式,使用@Async注解实现,结果发现不好用,记日志还是同步的,经过排查发现以下几个问题。

1、启动类上开启注解忘了加。

Spirngboot使用@Async异步调用,出现不异步问题。_第1张图片

2、同步方法在同一个工具类中调用的异步方法。

记日志的工具类中开放一个同步方法,用于处理日志数据,处理完成后再调用异步发送日志。这样处理导致异步注解不生效,为了解决问题,将处理日志数据的方法也设置为异步(加上异步注解)。这样确实解决了不异步的问题,但是有导致另一个业务上的问题,从业务线程上下文中拿数据时候已经拿不到了:异步之后已经是另一个线程。

3、异步后线程数据无法获取

为了解决第三个问题,只能把第二个问题还原,最终想的办法就是:将异步的方法单独摘出来放到一个工具类里,即一个工具类处理数据,再调用另一个工具类异步发送日志。最终完成异步记日志。

 

 

以上若有理解错误,欢迎大家批评指正,谢谢。

 

 

你可能感兴趣的:(笔记,java,spring,spring,boot)