今天遇到一个奇葩问题,项目切换环境,导致前台查询时间格式编程一串数字。上图说明(老环境),(新环境)
,系统是原样移植。
该问题困扰好久,网上各种找方法,但是未果。
分析问题:项目原样移植,故不是项目问题,肯定是环境问题。
环境分析:
1、老系统:weblogic9.2 oracle10g jdk1.5 采用weblogic配置数据源方式连接数据库
2、新系统:weblogic10.3 oracle11g jdk1.6 采用weblogic配置数据源方式连接数据库
由于差异较大,
1、故在本地环境用weblogic10.3连接老环境数据库,日期显示仍然有问题,故排除数据库原因。
2、然后用tomcat在本地部署项目连接老环境数据库,日期正常;连接新环境数据库,日期正常,本地环境是jdk1.7,故排除jdk和数据库原因。
3、最终将问题定格在中间件上,仔细观察后台日志,发现用tomcat查询的时候,后台SQL结果中是2018-01-01格式,而用weblogic时,后台时间格式为2018-01-01 00:00:00.0格式,于是将问题又锁定在数据库的连接上
4、在项目中加入weblogic.xml,配置优先项目的jar包,发现前台数据格式正常,于是将问题再次确定是JDBC问题。
5、检查老环境的jdbc连接(路径:/wls10/wlserver_9.2/server/lib)采用的是ojdbc14.jar,而新环境(路径:/wls10/wlserver_10.3/server/lib)采用的是ojdbc6.jar,于是将ojdbc14.jar复制到新环境中的对应路径下,启动项目仍然无效,所以应该是weblogic调用jar顺序问题。注:一定不要将ojdbc6.jar删除,否则用weblogic配置数据源时候,会报找不到驱动的错误。
6、在weblogic中配置加载ojdbc14.jar (配置方法:/wls10/wlserver_10.3/common/bin/commEnv.sh 文件的WEBLOGIC_CLASSPATH=""属性中将jar路径写入) ,项目启动正常,但是在登录系统的时候,报错java.io.StreamCorruptedException: invalid stream header: 00540001,发现该报错的上面两行中有在数据库中差时间的操作,网上查询,问题应该是ojdbc14.jar与jdk1.6有不兼容地方
7、检查本地项目采用的是ojdbc14_g.jar,故将此jar再次放入到新环境的server/lib下,然后配置优先加载该jar,最终问题解决。
该问题主要是由于jar冲突及jar升级造成,望对有类似情况的朋友有帮助,认真分析问题与分析数据,往往能更快的解决问题。