Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何强制Spring引导JVM进入UTC时区?_Java_Spring_Spring Boot_Timezone - Fatal编程技术网

Java 如何强制Spring引导JVM进入UTC时区?

Java 如何强制Spring引导JVM进入UTC时区?,java,spring,spring-boot,timezone,Java,Spring,Spring Boot,Timezone,我看到 我试过了 mvn spring引导:运行-Dexec.args=“-Duser.timezone=GMT” mvn spring引导:运行-Dexec.args=“-Duser.timezone=UTC” config/application.properties中的user.timezone=UTC user.timezone=GMT 在pom.xml中: <plugin> <groupId>org.springframework.bo

我看到

我试过了

  • mvn spring引导:运行-Dexec.args=“-Duser.timezone=GMT”
  • mvn spring引导:运行-Dexec.args=“-Duser.timezone=UTC”
  • config/application.properties中的
    user.timezone=UTC
  • 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>
    
    sun.util.calendar.ZoneInfo[id=“America/New_York”,偏移量=-18000000,DSTSaviews=3600000,useDaylight=true,transitions=235,lastRule=java.util.SimpleTimeZone[id=America/New_York,offset=-18000000,dstSaves=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDayOfWeek=1,endTime=7200000,endTimeMode=0]]

    如果要将JVM选项从Maven Spring Boot插件传递到分叉的Spring Boot应用程序,请使用Spring Boot 1.5.19、Java 8:

    <properties>
      <spring-boot.run.jvmArguments>-Duser.timezone=UTC</spring-boot.run.jvmArguments>
    </properties>
    
    java -Duser.timezone=UTC -jar app.jar
    
    或者在运行完全打包的Spring引导应用程序时:

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

    您可以使用带有
    @Configuration
    注释的类来配置时区。您可以将其放在项目中的任何位置。我通常将属于此类别的所有类放在名为
    config
    的包中。请确保将
    @PostConstruct
    注释添加到实际设置时区的方法中e时区

    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());
        }
    }
    

    请参阅

    我认为您可以在应用程序级别设置应用程序的时区。我认为此链接将对您有所帮助。

    因此,您需要做的是将“@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"));
        }
    
    }
    

    希望这能对您有所帮助!

    如果您的应用程序在linux下运行,请提供更多选项:

    设置
    TZ
    环境变量 请参阅“在POSIX系统中,用户可以通过TZ环境变量指定时区”()

    此选项在任何云环境中都特别有用

    符号链接
    /etc/locatime
    即,在我的本地系统中,指向
    /usr/share/zoneinfo/Europe/Berlin
    的符号链接为
    /etc/locatime

    ➜ ls -l /etc/localtime  
    lrwxrwxrwx 1 root root 33 22. Jan 23:01 /etc/localtime -> /usr/share/zoneinfo/Europe/Berlin
    
    您可以使用
    ln-s/usr/share/zoneinfo/GMT/etc/localtime
    轻松更改符号链接,可以在
    /usr/share/zoneinfo/
    中找到可能的值

    此选项也可以通过装载主机卷在许多云环境中使用,请参阅。

    -code>-Duser.timezone=UTC
    那对我不起作用

    但是如果你使用JVM参数,这对我来说很有效。 参考资料:


    只需
    -Duser.timezone=UTC

    第一个选项
    @Chloe对我来说可以使用
    -Dspring boot.run.jvmArguments=“-Duser.timezone=UTC”
    -Dspring-boot.run.jvmArguments=“-Duser.timezone=UTC”
    -Dspring-boot.run.jvmArguments="-Duser.timezone=America/New_York
    与Spring Boot 2.1.2.RELEASE和Java 11.Project一起生成。我明白了。必须是v1中的一个bug,并在v2中修复。
    Java-Duser.timezone=UTC-jar target\App SNAPSHOT.war
    确实有效。-Duser.timezone=UTC不起作用,但如果使用JVM参数,则对我有效。参考:as si示例as:-Duser.timezone=UTC此操作适用于Spring Boot v1:
    mvn Spring Boot:run-Drun.jvmArguments=“-Duser.timezone=UTC”
    这不适用于在调用
    init()
    方法之前运行的代码,例如JVM初始化或Spring bean构造。如果在
    main()
    方法,但傻瓜式的方法是使用
    -D
    选项。