在多线程Web应用程序中访问请求范围的Bean

场景:我们有一个在Websphere中运行的Spring托管的Web应用程序。(Spring 3.0.x,WAS
7)Webapp通过Spring的Web应用程序利用Websphere的工作管理器WorkManagerTaskExecutor(配置为10的线程池)以执行计算密集型db读取操作。因此,基本上,有一个请求来生成10个不同的文件。要生成文档,只需db读取即可收集/处理数据。因此,我们基本上产生了10个线程来处理10个文档,最后收集了10个工作人员返回的10个文档,并将它们合并并写回给客户端一个很大的响应。我们确定的是,当10个线程正在收集/处理数据时,会进行许多类似的数据库调用。因此,我们想到的是围绕最执行的db方法创建一个Aspect以缓存响应。该方面被配置为单例,并且该方面使用的缓存被自动连接到该方面,并且将范围设置为request-
scope,以便每个请求都有自己的缓存。

问题:现在,这种方法的问题在于,当线程正在执行其数据库调用并且Aspect被插入时,我们将获得java.lang.IllegalStateException: No thread-bound request found异常。我理解这是完全有效的,因为线程是在请求上下文之外执行的。

有没有办法解决这个问题?是否可以将具有请求范围的缓存的方面应用于这些线程调用的方法?

 
posted @ 2020-11-02 14:34  chuxin001  阅读(115)  评论(0)    收藏  举报