如何在直接用Java运行SpringBoot WAR包时传递user.timezone作为JVM参数
问题解答
当然可以通过JVM参数设置user.timezone,你之前的尝试失败是因为参数位置或用法错误:
错误原因分析
- 第一种方式:JVM参数(以
-D开头的参数)必须放在-jar参数之前。-jar之后的参数都会被当作应用程序的启动参数,而非JVM参数,所以你的-Duser.timezone根本没被JVM识别。 - 第二种方式:
-Dspring-boot.run.jvmArguments是Spring Boot Maven/Gradle插件的专属参数,只有用mvn spring-boot:run或gradle bootRun启动应用时才生效,直接用java -jar执行WAR包时这个参数完全无效。
正确命令写法
把-Duser.timezone放在java命令之后、-jar之前即可:
java -Duser.timezone=America/New_York -jar build/libs/sample-project-0.1.0.war --spring.profiles.active=dev
验证时区是否生效
可以在应用中添加代码验证时区设置:
// 在Spring Boot应用的组件中打印默认时区 System.out.println("当前JVM时区:" + TimeZone.getDefault().getID());
启动后如果控制台输出America/New_York,说明设置成功。
内容的提问来源于stack exchange,提问作者bobbyrne01
相关产品推荐
相关产品推荐

