为什么 ThreadLocal 实用程序在 Spring MVC 应用程序中总是返回 null?

发布于 2024-12-02 19:03:14 字数 601 浏览 1 评论 0原文

我编写了这个实用程序类来在 Spring MVC 应用程序中保存临时数据:

public abstract class FooUtil {

    private static final ThreadLocal<String> threadFoo = new ThreadLocal<String>();

    public static String getFooId(){
        return threadFoo.get();
    }

    public static void setFooId(String fooId){
        threadFoo.set(fooId);
    }

    public static void removeFooId(){
        threadFoo.remove();
    }

}

因此我调用 FooUtil.setFooId("foo")

但是当我稍后调用 FooUtil.getFooId() 时,它总是返回 null

我需要构造函数吗?或者也许这不应该是一个抽象类?我不知道。

I wrote this utility class to save temporary data in a Spring MVC app:

public abstract class FooUtil {

    private static final ThreadLocal<String> threadFoo = new ThreadLocal<String>();

    public static String getFooId(){
        return threadFoo.get();
    }

    public static void setFooId(String fooId){
        threadFoo.set(fooId);
    }

    public static void removeFooId(){
        threadFoo.remove();
    }

}

So I call FooUtil.setFooId("foo").

But when I later call FooUtil.getFooId(), it always returns null.

Do I need a constructor? Or maybe this shouldn't be an abstract class? I don't know.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不即不离 2024-12-09 19:03:14

您需要从与 setFooId 相同的线程调用 getFooId。这样你会得到相同的结果。
当您设置并获取值时,我会记录线程名称以查看它们是否相同。

You need to call getFooId from the same thread as setFooId. This way you get the same result.
I would log the thread name when you set and get values to see if they are the same.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文