Почему утилита ThreadLocal всегда возвращает ноль в приложении Spring MVC? - PullRequest
2 голосов
/ 05 сентября 2011

Я написал этот класс утилит для сохранения временных данных в приложении 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.

Нужен ли конструктор?Или, может быть, это не должен быть абстрактный класс?Я не знаю.

1 Ответ

3 голосов
/ 05 сентября 2011

Вам нужно вызвать getFooId из того же потока, что и setFooId.Таким образом, вы получите тот же результат.Я бы записал имя потока, когда вы установите и получите значения, чтобы увидеть, совпадают ли они.

...