代码之家  ›  专栏  ›  技术社区  ›  Chloe

如何强制一个SpringBootJVM进入UTC时区?

  •  1
  • Chloe  · 技术社区  · 5 年前

    我看见了 Force Java timezone as GMT/UTC

    我试过

    • MVN Spring启动:run-dexec.args=“-duser.timezone=gmt”
    • mvn spring boot:run-dexec.args=“-duser.timezone=utc”
    • user.timezone=UTC 在里面 config/application.properties
    • user.timezone=GMT
    • 在POM.XML中:

          <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
              <configuration>
                  <properties>
                    <spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments>
                  </properties>
              </configuration>
          </plugin>
      
    • mvn spring boot:run-dspring boot.run.jvmarguments=“-duser.timezone=utc”

    但是打印出来了

    System.out.println(TimeZone.getDefault());
    

    ID =“美国/NeXyyk”,偏移量=18000000,dStaseLo==235,Lastrue= Java.UTIL.SimeTyMeCy[ID]=美国/NeXyYyk,偏移量=18000000,dStAtLe= 3600000,UsDayLoad=0,StaskMeod=3,StistalQue= 2,StestDayOfDe= 1,StestTime= 7200000,StimeTimeMod=0,EndioMe=day=1,enddayOfWeek=1,endTime=7200000,endTimeMode=0]]

    8版本的弹簧引导程序1.5.19

    4 回复  |  直到 5 年前
        1
  •  0
  •   Karol Dowbecki    5 年前

    使用 spring-boot.run.jvmArguments property 如果要将JVM选项从Maven Spring引导插件传递到分叉的Spring引导应用程序:

    <properties>
      <spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments>
    </properties>
    

    这相当于命令行语法:

    mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Duser.timezone=UTC"
    

    或者在运行完全打包的Spring引导应用程序时:

    java -Duser.timezone=UTC -jar app.jar
    
        2
  •  1
  •   Jonathan JOhx    5 年前

    好吧,根据你的问题,你有两个选择:

    1. 在参数行user.timezone的pom.xml设置中,在surefire设置systempropertyvariables中的属性之前:

      <plugin>
       ...
        <configuration>
          <argLine>-Duser.timezone=UTC</argLine>
        </configuration>
        ... 
      </plugin>
      
    2. 在应用程序类或某些配置类中以及方法setdefault time zone to utc中创建init方法:

      @PostConstruct
      public void init() {
         TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
         // OR you can use the line below
         // System.setProperty("user.timezone", "UTC")
      }
      
        3
  •  1
  •   YONGSOO KIM    5 年前

    我认为您可以在应用程序级别上设置应用程序的时区。我想这个链接对你有帮助。 https://www.onlinetutorialspoint.com/spring-boot/how-to-set-spring-boot-settimezone.html

    因此,您需要做的是将“@Postconstruct”批注添加到“@SpringBootApplication”批注所在的主类中,并在其中添加时区设置方法。下面是一个例子。

    @SpringBootApplication
    public class HellotimezoneApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(HellotimezoneApplication.class, args);
        }
    
        @PostConstruct
        public void init(){
          // Setting Spring Boot SetTimeZone
          TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
        }
    
    }
    

    希望这对你有帮助!

        4
  •  1
  •   Jabari Dash    5 年前

    您可以使用注释了的类来配置时区。 @Configuration 注释。你可以把它放在你项目的任何地方。我通常在一个名为 config . 确保添加 @PostConstruct 实际设置时区的方法的注释。

    import org.springframework.context.annotation.Configuration;
    
    import javax.annotation.PostConstruct;
    
    @Configuration
    public class LocaleConfig {
    
        @PostConstruct
        public void init() {
    
            TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    
            System.out.println("Date in UTC: " + new Date().toString());
        }
    }
    

    original article