Часовой пояс Springboot Tomcat 8 AS - PullRequest
0 голосов
/ 14 июня 2019

В моем весеннем загрузочном приложении, работающем на Tomcat 8, у меня есть этот код в SpringBootServletInitializer:

public class MyApplication extends SpringBootServletInitializer {

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    return application.sources(MyApplication.class);
}

@PostConstruct
public void init() {
    // Setting Spring Boot SetTimeZone
    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}

public static void main(String[] args) {
    SpringApplication.run(MyApplication.class, args);
} }

На моем сервере приложений tomcat у меня есть некоторые записи с использованием Spring Framework, проблема в том, что все приложения внутри моего tomcat изменили часовой пояс в соответствии с моим приложением, и это неправильно.

Как я могу установить часовой пояс только для моего приложения, не влияя на часовой пояс других приложений в tomcat?

Спасибо

1 Ответ

1 голос
/ 14 июня 2019

JVM, на которой работает ваш сервер Tomcat, имеет только один часовой пояс по умолчанию. Изменение этого значения по умолчанию немедленно влияет на весь код во всех потоках всех приложений, работающих в этой JVM. Поэтому звонить по номеру TimeZone.setDefault почти никогда не стоит.

Узнайте о современных java.time классах, которые годы назад вытеснили ужасные унаследованные классы даты и времени. В частности, используйте ZoneId & ZoneOffset вместо TimeZone. Для UTC используйте константу ZoneOffset.UTC.

Узнайте, как прослушиватели контекста сервлета задают объекты как пары ключ-значение в хранилище «атрибутов» в контексте сервлета. Вы можете хранить желаемый объект ZoneId там. Или, возможно, у Spring есть способ помочь с этим. (Я не использую Spring.)

См. Мой ответ на этот похожий вопрос для получения дополнительной информации.

...