当我在“Windows Server 2016 Datacenter”机器上使用Tomcat 9运行springboot 2.3.8应用程序时,我遇到了时区问题。在本地使用Eclipse或Tomcat9运行它不会触发问题。
我将时区设置在乞讨处,使用:
@PostConstruct
public void init()
{
TimeZone.setDefault(TimeZone.getTimeZone("Europe/Berlin"));
Calendar now = Calendar.getInstance();
TimeZone timeZone = now.getTimeZone();
System.out.println(timeZone.getDisplayName());
}
并打印->中欧标准时间
但是,稍后当我调用其中一个endpoint并以与前面相同的方式检查时区时
Calendar now = Calendar.getInstance();
TimeZone timeZone = now.getTimeZone();
System.out.println(timeZone.getDisplayName());
我得到-->协调世界时
我假设不是在@PostConstruct上真正设置了时区,就是后来有什么东西覆盖了它。
我的问题是,是什么导致了这种变化,我怎样才能使我的时区一直在“欧洲/柏林”。
我已经尝试过像上面提到的那样更改应用程序内部的时区,使用tomcat中的Java参数,并更改机器本身的时区,但在所有情况下更改都被覆盖,我在调用和endpoint时得到UTC。
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.8.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>com.test</groupId>
<artifactId>project</artifactId>
<name>project</name>
<version>1.00</version>
<packaging>war</packaging>
<url>http://maven.apache.org</url>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.test.skip>true</maven.test.skip>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- Master Versions -->
<spring.boot.version>2.3.8.RELEASE</spring.boot.version>
<oracle.version>12.2.0.1</oracle.version>
</properties>
<!-- Generates the Build Info/Properties -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>build-info</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Adds local jar to the final WAR -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<webResources>
<resource>
<directory>${project.basedir}/libraries/</directory>
<targetPath>WEB-INF/lib</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring.boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring-boot-starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-integration</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ldap</groupId>
<artifactId>spring-ldap-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-ldap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-jwt</artifactId>
<version>1.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security.oauth</groupId>
<artifactId>spring-security-oauth2</artifactId>
<version>2.5.0.RELEASE</version>
</dependency>
<dependency>
<groupId>com.unboundid</groupId>
<artifactId>unboundid-ldapsdk</artifactId>
</dependency>
<!-- javax -->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
</dependency>
<!-- jjwt -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.1</version>
</dependency>
<!-- Oracle JDBC driver -->
<dependency>
<groupId>com.oracle.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>${oracle.version}</version>
</dependency>
<!-- HikariCP connection pool -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<!-- Swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tika/tika-example -->
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>1.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.tika/tika-parsers -->
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers</artifactId>
<version>1.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-mock -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-mock</artifactId>
<version>2.0.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring-test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<!-- Mockito -->
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
</dependency>
<!-- Powermock -->
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>2.0.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito2</artifactId>
<version>2.0.9</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
并打印->中欧标准时间
你为什么要这么做?“Calendar”作为一个API是坏的和过时的,不要使用它。“中欧标准时间”是一个奇怪的概念,你可能根本不想要。这是一个你需要摆脱的破碎的概念。
欧盟已经决定,整个欧盟将完全放弃夏令时的概念,但实际上并没有要求每个欧盟国家都必须使用同一时区。这意味着几件事:
>
这一直是一个白痴的标准;有“中欧标准时间”(UTC+1)和“中欧夏令时”(UTC+2),它们都缩短为CET,但通常的说法是“CEST”意味着夏令时(UTC+2),而“中欧标准时间”缩短为CET。面膜力矩。
这两个区域很快就会有完全不同的意义。充其量,我们只剩下“中欧时间”(CET),但实际上最终可能是UTC+2,所以“CET”现在指的是UTC+1,但明年它可能被重新解释为意味着UTC+2,这对计算机来说是地狱,所以最好的选择是一开始就不要购买这种CET/CET的废话。无论哪一个没有被选中,都将是一个过时的遗迹:一个没有任何国家真正在的区域。
也许CET/CET会完全消失:也许西欧国家采用UTC+1,而东方国家采用UTC+2,以匹配它们的经度。在真空中,波兰应采用UTC+2,荷兰应采用UTC+1。那就没有什么“欧洲中央时间”了。
您的代码中已经有了正确的答案:Europe/Berlin
。时区就是这样命名的。不包含3个字母或4个字母的缩略词,这些缩略词模糊不清、过载和不足。
但在所有情况下,更改都被覆盖,并且我在调用和端点时得到UTC。
这就是全局违约的问题。“不要使用单例”是一个常见的格言,这就是为什么:你会遇到很深的问题。
是的,有东西在覆盖它。
最好的解决方法是,您不需要关心“全局”时区属性是什么。现在使用日历的代码是什么?找到它,用基于java.time
的代码替换它。
参考:关于TLA时区ID的时区javadoc弃用通知。
我在一个Polymer2.0应用程序中使用了一个vaadin-grid,其中有几个列,几乎所有列都有一个Vaadin-Grid-Sorter。由于我想给用户一个机会来保持其排序首选项,我的问题是: 我可以在代码中设置要排序的列和排序方向吗? 我看了一下网格源代码,但没有找到任何(公共)属性。
我已经为Postgresql启用了复制,并且正在使用PGPool进行负载平衡。 我在使用HikariCP甚至Apache DBCP连接到Postgres时遇到了问题。 在SpringBoot应用程序中有没有使用PGPool的方法? 请查找堆栈跟踪: 2018-08-10 10:20:19.124信息37879----[main]com.zaxxer.hikari.hikaridatasource:
我试图在SpringMVC中运行SpringBoot应用程序,在SpringMVCPOM中添加SpringBoot应用程序依赖项,并扫描SpringBoot包,但我面临以下问题
我正在做一个项目,它需要在飞行中改变语言。我正在尝试设置所需的区域设置,但我一设置,应用程序就崩溃了,抱怨它找不到资源(比如r.layout.*r.drawable.*) 这是我用来设置新区域设置的代码: 编辑:已添加日志 E/AndroidRuntime:致命异常:main java.lang.RuntimeException:无法启动activity组件Info{com.flavorburst
问题内容: 如何在Tomcat中更改时区?Webapp之一(Solr)使用的时区不正确 (与MySQL时间戳相比) ,我认为更改Tomcat的时区会有所帮助。谢谢! 问题答案: 除非tomcat具有个人的TZ环境变量,否则它将在我的系统上使用的副本。 Tomcat的个人时区将在其启动脚本中以如下形式指定:
问题内容: 我正在使用FXML中描述的核心组件制作JavaFX桌面应用程序,我想为用户提供更改语言的选项。但是,一旦从FXML加载了组件,我还没有找到任何直接的方法来更改语言。 问题是,有什么标准方法可以处理JavaFX中的语言切换。 问题答案: 你可以做这样的事情。正如您在回答中一样,您可能希望将其实现为单例,或者使用DI框架在需要的地方注入单个实例: 现在,您可以执行以下操作: 而且任何时候您