在使用Spring框架的@Async
注解时,如果遇到空指针异常(NullPointerException),通常是因为异步执行的方法尝试访问了未初始化的或者为null的对象。
可能情况:
注解@Async注解加错位置了
首先需要了解@Async注解的作用:
@Async注解是Spring框架提供的一个功能,用于标记一个方法为异步执行。当你在方法上使用@Async注解时,Spring会自动创建一个线程来执行这个方法,而不是在原来的线程中执行。这样,调用方可以立即返回,而不需要等待被注解方法执行完成。
情景:这种情况最有可出现在分布式的项目中,当注解加在有需要从当前线程的ThreadLocadMap中获取数据的代码块上,当前对象的id等信息存在另一个线程的ThreadLocadMap中,新线程中的ThreadLocadMap是空的,获取不到任何数据,所以会报NullPointerException异常。
所以是只需要把@Async注解位置加对就解决了。
其他错误情况:
没有在配置类上加@EnableAsync注解,导致@Async注解未生效。
在Spring应用中,如果忘记在配置类上加 @EnableAsync , @Async 注解将不会生效。Spring需要这个注解来开启异步方法执行的功能。(只需要将注解加在启动类上就可以解决问题)