Я прибыл сюда в поисках решения для установки системных свойств для потока. Я использовал превосходный пример @Peter Lawrey, приведенный выше, и это было как раз то, что мне было нужно, с одним исключением - мой код должен был выполняться внутри контейнера сервлета (Tomcat), и поэтому я был обязан быть хорошим гражданином и не изменять ожидаемого поведения setProperty () для любого другого веб-приложения, работающего в том же экземпляре JVM. Чтобы решить эту проблему, я переименовал метод Питера setProperty()
в setLocalProperty()
:
public Object setThreadLocalProperty(String key, String value) {
return localProperties.get().setProperty(key, value);
}
С этим одним изменением результат состоит в том, что вызов setProperty () изменит свойство глобально - что будет желательным поведением для других потоков в JVM. Чтобы изменить свойство только для локального потока, вместо этого вызывается setThreadLocalProperty()
.
Таким образом, если у вас есть полный контроль над экземпляром приложения, код Питера должен работать для вас отлично. Однако, если ваше приложение живет в общей JVM - или если у вас есть необходимость иначе «наслоить» системные свойства на глобальные и локальные потоки, то одна модификация выше должна работать для вас.