spring boot2 多线程 异步非阻塞请求 如何在异步任务中获取注入的对象?

当我多线程异步处理任务时,主线程已经返回响应,在多线程通过调用外部服务获取内容时告知 Cannot ask for request attribute - request is not active anymore!

@Service
@Slf4j
public class EquityDataServiceImpl extends ServiceImpl<TestMapper, Test> implements TestService {

    @Autowired
    private testApi testApi;
    
    private List<String> getRemoteInfo() {
        // 子线程当执行到这里的时候,会报上面的错误
        List<String> result = test.getRemoteInfo(url);
        return result;
    }
    
}
  • 线程池初始化逻辑
@Configuration
public class ThreadPoolConfig {

    /**
     * IO 异步
     *
     * @return
     */
    @Bean
    public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
        ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
        threadPoolTaskExecutor.setTaskDecorator(new ContextCopyingDecorator());
        threadPoolTaskExecutor.setKeepAliveSeconds(30);
        threadPoolTaskExecutor.setAllowCoreThreadTimeOut(true);
        threadPoolTaskExecutor.setCorePoolSize(30);
        threadPoolTaskExecutor.setMaxPoolSize(100);
        threadPoolTaskExecutor.setQueueCapacity(2000);
    }
}
阅读 5.4k
2 个回答

更新到spring boot 2.0.6解决了

可以选择写个重载方法,传递注入成功对象!

getRemoteInfo(testApi testApi)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题