java 中 new 创建的一个类,去调用一个通过 SpringContextUtils.getBean 获取后调用被@Async修饰的方法,但是异步不生效

动态 未结 0 86
小小草
小小草 LV1 2023年9月23日 23:40 发表
如果你在一个通过new创建的类中,调用了通过SpringContextUtils.getBean获取的Bean,并且该Bean中有被@Async修饰的方法,但是异步不生效,可能有以下几个原因: 1. 通过new创建的类没有被Spring容器管理。如果通过new创建的类没有被Spring容器管理,那么其中调用的Bean也不会被Spring容器管理,因此@Async注解也不会生效。可以尝试将这个类交给Spring容器管理,或者使用@Autowired注入需要调用的Bean。 2. 调用@Async方法的类和被调用的@Async方法不在同一个类中。如果调用@Async方法的类和被调用的@Async方法不在同一个类中,那么@Async注解也不会生效。可以尝试将调用@Async方法的类和被调用的@Async方法放在同一个类中。 3. 没有配置线程池。默认情况下,Spring使用SimpleAsyncTaskExecutor作为线程池,但是这个线程池只能执行一个任务,如果要执行多个任务,需要配置ThreadPoolTaskExecutor。可以尝试在配置文件中配置ThreadPoolTaskExecutor。 4. 被调用的@Async方法没有返回值或返回值类型不正确。异步方法可以是void类型,也可以有返回值,但如果有返回值,返回值类型必须是Future或其子类,否则@Async注解也不会生效。 以上是一些常见的@Async注解不生效的原因,你可以根据具体情况进行排查。
收藏(0)  分享
相关标签: 智能问答
问题没解决?让AI助手帮你作答 AI助手
0个回复
  • 消灭零回复