热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

部署在Tomcat服务器中的web应用读取时间与系统时间不一致问题【靠谱】

2019独角兽企业重金招聘Python工程师标准我在部署应用到Ubantu系统上的tomcat服务器中运行,发现操作系统的时间和tomcat中的应用程序获取的时

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

    我在部署应用到Ubantu系统上的tomcat服务器中运行,发现操作系统的时间和tomcat中的应用程序获取的时间不一致,总是相差8个小时,但是查看当前操作系统的时区也是CST时区(中国标准时区)。

查看系统的时区:

root@localhost:~# date +"%Z %z"

CST +0800

      说明时区没有问题,是东八区时区,但是为什么tomcat启动的时候没有使用我设置好的时区呢?最后我通过java代码直接获取默认时区,发现输出的的是:Etc/UTC,怪不得时间差8小时,如下图:

获取系统默认时区

Java代码获取系统默认时区:

System.out.println(newDate());

System.out.println(System.getProperty("user.timezone"));

      在启动java程序的时候添加上-Duser.timezone=Asia/Shanghai参数,时区变对了,其原因是java程序在启动的时候如果没有指定时区,默认会根据System.getProperty("user.timezone")去获取时区操作系统配置文件中配置的时区。

Ubantu操作系统时区配置文件是/etc/timezone,将文件中的内容修改成Asia/Shanghai,保证java程序在启动的时候初始化时区是东八区。

Centos6.X操作系统的时区配置文件是/etc/sysconfig/clock,将文件内容修改为ZONE="Asia/Shanghai",来修正时区为东八区,保证java程序在启动的时候初始化时区是东八区。


 

修改Linux系统时区,以Ubantu和centos6.x为例:

修改Ubantu系统时区

时区修改成功

执行:

cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime

修改/etc/default/rcS中的UTC=yes改为UTC=no (Centos.x不用做这个操作)

时间同步:ntpdate time.windows.com

硬件时间和系统时间校准:

sudo hwclock --systohc --localtime

 

时区修改成功,但是记得修改时区默认配置文件/etc/timezone中的内容为Asia/Shanghai(Centos6.x修改的是/etc/sysconfig/clock文件中的内容为ZONE="Asia/Shanghai")。

检查时间是否一致,右下图可知系统时间和硬件时间已经保持一致了:

检查时间是否一致

注:在配置时区的时候,注意一定要校准系统时间和硬件时间,让两个时间保持一致

      但是,有的时候通过以上步骤还是解决不了java程序时区问题,java程序读取时间还是不对,甚至System.getProperty("user.timezone")都读不到时区信息,只有System.out.println(java.util.TimeZone.getDefault().getID())可以读到,并且读到的是系统在修改时区的时区信息。主要原因是我们在安装JDK之后发现时间不对才去修改的系统时区,此时jdk已经默认使用系统修改之前的那个时区,已经改不回来了,删掉jdk重装也没用。

有两种方法解决这个问题:

1、使用-Duser.timezone=GMT+08来指定时区;

2、就是修改/etc/profile文件,在文件的末尾添加 export TZ='Asia/Shanghai',然后使用命令source /etc/profile使其生效即可。

 

总结:

java程序在初始化时区的时候,如果没有指定JVM参数-Duser.timezone=GMT+08,java程序就会默认读取操作系统的时区来初始化java程序的时区。

为了保证java程序在启动时加载正确的默认时区:

1、需要将系统的时区改正确

2、还需要将硬件时钟的系统时钟校准

3、修改配置文件中的时区参数

4、在/etc/profile文件末尾添加:export TZ='Asia/Shanghai

5、修改tomcat安装目录下的bin目录下的catalina.sh脚本,添加JVM参数JAVA_OPTS="${JAVA_OPTS} -Duser.timezone=GMT+08",来保证Tomcat的时区是东八区时区



作者:cooze
链接:https://www.jianshu.com/p/5b16cb016442
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


转:https://my.oschina.net/airship/blog/3040559



推荐阅读
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • Java Socket 关键参数详解与优化建议
    Java Socket 的 API 虽然被广泛使用,但其关键参数的用途却鲜为人知。本文详细解析了 Java Socket 中的重要参数,如 backlog 参数,它用于控制服务器等待连接请求的队列长度。此外,还探讨了其他参数如 SO_TIMEOUT、SO_REUSEADDR 等的配置方法及其对性能的影响,并提供了优化建议,帮助开发者提升网络通信的稳定性和效率。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 本文详细介绍了如何在 Django 项目中使用 Admin 管理后台,包括创建超级用户、启动项目、管理数据模型和修改用户密码等步骤。 ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • 为了确保iOS应用能够安全地访问网站数据,本文介绍了如何在Nginx服务器上轻松配置CertBot以实现SSL证书的自动化管理。通过这一过程,可以确保应用始终使用HTTPS协议,从而提升数据传输的安全性和可靠性。文章详细阐述了配置步骤和常见问题的解决方法,帮助读者快速上手并成功部署SSL证书。 ... [详细]
  • 在 CentOS 7 系统中安装 Scrapy 时遇到了一些挑战。尽管 Scrapy 在 Ubuntu 上安装简便,但在 CentOS 7 上需要额外的配置和步骤。本文总结了常见问题及其解决方案,帮助用户顺利安装并使用 Scrapy 进行网络爬虫开发。 ... [详细]
  • Amoeba 通过优化 MySQL 的读写分离功能显著提升了数据库性能。作为一款基于 MySQL 协议的代理工具,Amoeba 能够高效地处理应用程序的请求,并根据预设的规则将 SQL 请求智能地分配到不同的数据库实例,从而实现负载均衡和高可用性。该方案不仅提高了系统的并发处理能力,还有效减少了主数据库的负担,确保了数据的一致性和可靠性。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
author-avatar
纤沙湖之歌
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有