0

我们有一个 Spring MVC Web 应用程序,在 JBoss 中运行,其中一些用户信息存储在 ThreadLocal 对象中。我们有一个问题,似乎有时某些请求会在任何这些请求完成执行之前覆盖另一个请求存储在 ThreadLocal 中的数据。这可能吗?

换句话说,JBoss 请求是否有可能在某些时候让步以支持另一个请求,例如在运行拦截器或访问某些类型的 bean 时?

我尝试将 JBoss 中的工作线程数量减少到 1,并且能够以这种方式相当可靠地重现我们的问题。这是我使用的配置:

    <subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false">
        <connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http"/>
        <virtual-server name="default-host" enable-welcome-root="true">
            <alias name="localhost"/>
            <alias name="example.com"/>
        </virtual-server>
    </subsystem>
4

1 回答 1

1

“[...] 读取另一个请求存储在 ThreadLocal 中的数据。”

我认为问题的标题应该是“May Spring MVC resue threads for continuous requests”,答案是“是的,它一直都在”。

也许您认为您在每种情况下都清理了您的线程本地存储,但在 servlet 环境中可能存在各种异常情况,其中一些完全超出您的控制。例如,客户端可以随时关闭 TCP 连接。

于 2013-05-27T12:08:01.390 回答