Java 春季MVC中的完全未来

Java 春季MVC中的完全未来,java,completable-future,Java,Completable Future,我正在考虑使用CompletableFuture开始处理数据库中的某些内容。该操作将需要几秒钟,但我希望在不等待此操作完成的情况下将控制权返回到浏览器 我的问题:这安全吗?是否存在由于初始请求返回响应而导致异步任务被垃圾收集的风险?当请求完成且可完成的未来线程仍在运行时,可能会出现以下异常。特别是,我在尝试从数据库获取数据时看到了这个错误,因为数据库bean是使用aop范围的代理会话定义的 java.lang.IllegalStateException:未找到线程绑定请求: 解决方案:- 调用另

我正在考虑使用CompletableFuture开始处理数据库中的某些内容。该操作将需要几秒钟,但我希望在不等待此操作完成的情况下将控制权返回到浏览器


我的问题:这安全吗?是否存在由于初始请求返回响应而导致异步任务被垃圾收集的风险?

当请求完成且可完成的未来线程仍在运行时,可能会出现以下异常。特别是,我在尝试从数据库获取数据时看到了这个错误,因为数据库bean是使用aop范围的代理会话定义的

java.lang.IllegalStateException:未找到线程绑定请求:

解决方案:-

调用另一个RESTFul服务以在新请求中运行任务

SimpleAsyncTaskExecutor taskExecutor = new SimpleAsyncTaskExecutor();
CompletableFuture.supplyAsync(() -> callRestFulService(Integer.valueOf(id)),
                taskExecutor);
注:-


我刚刚分享了我的经验。可以有其他方法来处理此场景,或者如果您没有任何数据库交互,也可以这样做。

不,没有风险。任务函数或Runnable或线程可以访问的任何东西,因此它不会被垃圾收集。