最近在开发中遇到一个非常罕见的问题,就是centos测试服务器上的时间虽然正确,但是安装在上面的Tomacat7.x的时间时区出现错误。
我的程序代码中,恰好使用了对时间查询的sql语句,例如
select <cols> from table where sendtime <= #{nowtime} and deadlinetime >= #{nowtime}
此时执行远程单步调试,发现代码中new Date()取得的当前时间nowtime,比正确的时间晚13个小时,造成查询结果错误,难道取当前时间还会出错?于是改用
Calendar calendar = Calendar.getInstance();
Date nowDate = calendar.getTime();
仍然不能获得正确的当前时间。这是怎么回事,好长时间让我一头雾水。
在网上搜索了一下通过代码解决的方案,有些文章给出了在代码中设置时区的办法,类似下面:
//更改当前时区为东八区GMT+8,即北京时间。
TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));
这样的话,通过new Date()或者calendar.getTime()可以取得当前正确时间了,但是又出现了新的问题,mysql数据库里数据的时间字段的时间发生了改变,全部自动加了13个小时!
具体就是,用客户端软件连接到mysql,执行select <cols> from table order by sendtime desc类似的语句,看到sendtime,deadlinetime等字段的值没有变化,但是远程单步调试时,查看执行上面sql语句取出的结果集列表里的时间,则全部自动往后推了13个小时,怎么会这样!前面忘记说了,时间字段都是timestamp型的字段。
看来使用代码设置时区,会对数据库的timestamp时间类型的字段产生影响。
至此,几乎一筹莫展,无计可施了。
突然,眼前灵光一闪,有了一个突破口,想起这几天观察这个Tomcat7.x的log日志文件的时间,也总是比当前正确时间晚13小时。是怎么发现这个问题的呢?在centos测试机上tail -f catalina.out文件时,发现实时打印的带时间信息的log语句,都比当前服务器时间晚13个小时。
笔者开发Java好多年,从未遇到过这种问题,以前遇到的,基本是服务器时区不正确,造成Tomcat等webserver时间跟着出错,这样至少服务器时区时间和webserver的时间还是一致的;而这次的情况,却是服务器时区,时间都正确,Tomcat容器的时间/时区却不正确。
至今尚不知如何造成这个错误的。因为我在自己账号的目录下直接wget一个tomcat7.x发行版并解压安装,并未出现这个问题,说明并不是tomcat7.x自身的问题。显然还是在对tomcat7.x的某些配置做了修订之后才会引发这个问题。
这下问题明了了,先把log日志的时间改正确再说!
为了解决此问题,google了一些文章,在${catalina_home}/bin/catalina.sh文件中的JAVA_OPTS启动参数中做了以下调整:
JAVA_OPTS="-server -Duser.timezone=GMT+08 -Xms1024m -Xmx1024m"
即增加了时区选项-Duser.timezone=GMT+08,重新启动Tomcat,log日志的时间正确了。
接着,改回原始的代码,注释TimeZone.setDefault(TimeZone.getTimeZone("GMT+8"));等语句,所有的时间和sql查询都正确了。
至此,问题彻底解决。
分享到:
相关推荐
【标题】:“Tomcat7.x 64位系统”指的是Apache Tomcat服务器的第七个主要版本,专为64位操作系统设计。Tomcat是开源软件,遵循Apache Software Foundation的许可,是Java Servlet、JavaServer Pages(JSP)和Java ...
标题中的“tomcat7.0下的64位的tomcat7.exe 和tomcat7w.exe”指的是Apache Tomcat服务器在7.0版本中为64位操作系统提供的可执行文件。Tomcat是Apache软件基金会的一个开源项目,它是一个流行的Java Servlet容器,...
集群 Tomcat 6.x 和 Tomcat 7.x,使用 redis 存储会话实现RedisManager继承org.apache.catalina.session.StandardManager,RedisSession继承org.apache.catalina.session.StandardSession。安装步骤:1. 复制:wjw-...
标题中的“tomcat5.0.x与tomcat5.5.x的配置有较大区别”指的是在升级或迁移Tomcat版本时,配置文件的差异可能导致应用无法正常运行。这两个版本之间的主要区别在于`server.xml`配置文件中对Web应用程序的设置方式,...
9. **版本兼容性**:Tomcat6.x对应的是Java EE 5规范,因此与Java SE 5或6兼容,但不支持更高级别的Java特性。 10. **安全性**:支持SSL/TLS协议,可以实现安全的HTTPS通信,同时有多种安全机制如角色基础的访问...
【标题】: "Tomcat6.0.x 包" 【描述】: "Tomcat6.0windows安装程序 含有源代码" 这个压缩包文件包含了Apache ...总之,Tomcat 6.0.x是Java Web开发中一个不可或缺的工具,它的源代码也为我们提供了宝贵的教育资源。
1. **版本特性**:Tomcat 8.5.x系列是基于Java EE 7标准的,相比于之前的版本,它增加了对WebSocket、JSON-P、JAX-RS 2.0等新特性的支持。 2. **配置**:在Windows环境下,可以通过修改“conf/server.xml”文件来...
本文将详细介绍如何在MyEclipse中配置Tomcat 7.x的环境,帮助开发者创建、运行和调试基于Java Servlet和JavaServer Pages(JSP)的应用。 首先,你需要确保已经安装了MyEclipse和Tomcat 7.x。如果你尚未安装,可以...
Tomcat 7.0.109作为7.x系列的最后一个版本,意味着在发布后,官方将不再为这个分支提供新功能更新或安全补丁。这通常是开发者为了保持稳定性和兼容性而选择的版本,因为较旧版本的软件在已知问题上已经被充分测试和...
apache-tomcat-9.0.45-windows-x64apache-tomcat-9.0.45-windows-x64apache-tomcat-9.0.45-windows-x64apache-tomcat-9.0.45-windows-x64apache-tomcat-9.0.45-windows-x64apache-tomcat-9.0.45-windows-x64apache-...
- **Admin 模块包**:由于 Tomcat 6.0.X 默认不包含 Admin 模块,我们需要从其他来源获取相应的 Admin 模块包。通常情况下,可以使用 Tomcat 5.5.27 版本中的 Admin 模块来适配 Tomcat 6.0.X。 - **依赖库**:Admin ...
apache-tomcat-8.5.78-windows-x64安装包 apache-tomcat-8.5.78-windows-x64安装包 apache-tomcat-8.5.78-windows-x64安装包 apache-tomcat-8.5.78-windows-x64安装包 apache-tomcat-8.5.78-windows-x64安装包 ...
Apache Tomcat 9.0.85 是一个广泛使用的开源软件,它是一个实现了Java Servlet、JavaServer Pages(JSP)和Java EE的Web应用程序容器。这个版本是针对Java开发者的,用于部署和运行基于Java技术的Web应用。下面将...
在本文中,我们将详细探讨Tomcat 8.5.59版本,这是Tomcat 8.x系列的一个稳定版本,具有诸多改进和增强,旨在提供更高效、更安全的服务。 一、Tomcat 8.5的核心特性 1. Java EE 8支持:Tomcat 8.5系列全面支持Java ...
- **Java EE 7支持**:Tomcat 8.5系列支持Java Enterprise Edition (Java EE) 7的部分规范,包括Servlet 3.1、JSP 2.3和EL 3.0。 - **NIO.2**:8.5版引入了对Java NIO.2 API的支持,提供了更好的性能和并发能力。 ...
请注意,依赖内部实现类可能会导致与其他Tomcat版本的兼容性问题,并且在未来的版本中可能不再可用,因此这是一种权宜之计。 Apache Tomcat 8.5.51的这个变化提醒我们,保持软件更新的重要性,特别是在遵循行业标准...
comet4j消息推送所需的comet4j-tomcat7.jar包,comet4j-tomcat7.jar
Tomcat 5.5.x系列是Tomcat发展历史上的一个重要版本,提供了许多增强功能和性能优化。 在Java Web开发中,Servlet是一种用于扩展服务器功能的Java类,而JSP则是基于HTML的页面,其中可以嵌入Java代码,用于创建动态...
Apache Tomcat 5.0.x 对于Servlet和JSP的支持是一样的。大量底层代码里的重大修改,带来性能的提升、稳定性的提升及整体成本。 Apache Tomcat 5.0.x在Apache Tomcat 4.1的基础上做了很多改动,包括: · 性能优化和...
Apache Tomcat 8.5.x系列是8.x主版本的一个稳定分支,它在性能、安全性以及功能上都有所提升。 首先,我们来深入了解下Apache Tomcat的主要组成部分: 1. **bin目录**:包含了启动和停止Tomcat的脚本,如`catalina...