上线遇到的版本问题-花了一天时间才解决
来源:互联网 发布:张家辉演技知乎 编辑:程序博客网 时间:2024/06/10 01:32
问题描述:有一个生成二维码的功能,本地和测试都通过,放到预发环境上,接口访问就报错,而且把所有代码都Exception级别catch了,catch中的日志依然没有输出,然而在catch中用return可以生效。说明代码一定抛异常了,但是居然没有catch住。
解决过程:在代码可能出问题的行数都打日志,没有定位到问题。最后在这个接口的每一行上下都加上日志,发现了代码走到其中一行就直接终止了,后面的也没执行,catch中的代码执行了,但是没有打印日志。执行终止的这一句很简单,只是jar中的一句构造方法。而且构造方法是默认的。弄了快到晚上八点了还是没有进展,有同事用反编译去看源码,有同事去找其它生成二维码的方法,还是同事看看预发的jdk版本发现问题所在了。预发的jdk6,本地和测试都是jdk7.可能是这个问题导致的,然后就在本地将版本降为1.6去跑单元测试,果真出现了Exception in thread “main” java.lang.UnsupportedClassVersionError.由于生成二维码的版本3.2要求jdk7,最后查了一下发现将生成二维码的版本降低一下就可以了。即将版本从3.2–>2.3即可
小知识:
1,异常接口图,如果不是这次遇到了Error,然后自己亲手画一遍,都记不清了。
2,在《深入理解java虚拟机》中讲到,java的版本是从45开始的,JDK1.1之后的每个JDK大版本发布主板本号向上加1(JDK1.0~1.1使用了45.0~45.3的版本号),高版本的JDK能向下兼容以前版本的class文件,但不能运行以后版本的class文件,即使文件格式未发生任何变化,虚拟机也必须拒绝执行超过其版本号的class文件。
3,为什么jvm拒绝执行超过其版本号的代码时候,业务日志没有打印?(待解决)
小感悟:正常来说,开发,测试,线上环境保持一致,就不会出现这种问题。但是有时候一个人同时做新项目和维护老项目是时候就难免出现类似这种版本不一致出现的奇怪的问题。
提升方法: 1,尝试将jdk统一为1.7或1.8(会排上需求日程)
2,《深入理解java虚拟机》多看
- 上线遇到的版本问题-花了一天时间才解决
- 一个花了很长时间才解决的问题
- 上线遇到的问题
- RegQueryValueEx 耗了我一天的时间 终于解决了
- App上线遇到的问题
- 进步了的时间才算时间
- DWR3 文件上传 , 搞了一天才解决,汗!!!
- 游戏上线了,聊聊遇到的坑
- findmaven的英文版本上线了
- 换了电脑了,之前电脑上安装svn和git的时候,图标是都可以正常显示的,但是这次出了问题,废了好多时间才解决了,所以想记录一下解决
- 编译libtorrent,花了两天时间,才找到合适版本并编译例子通过
- 网站上线,虚拟主机遇到的问题!
- 项目上线后遇到的问题总结
- appstore 上线遇到的问题总结
- 上线部署遇到的各种问题
- 一次PHP代码上线遇到的问题
- 上线一开始遇到的三个问题
- 上线遇到的问题和解决方法
- Hdoj2018_母牛的故事
- (一)线段树入门--区间最值查询
- Hdoj2019_数列有序!
- apache虚拟主机实现多站点
- [Java之四]继承的扩展
- 上线遇到的版本问题-花了一天时间才解决
- Hdoj2020_绝对值排序
- STL大总结~
- saltstack-安装笔记(2)
- 914电路原理
- 2017 Multi-University Training Contest
- 初探面向对象编程之oop与设计模式
- [Java之五]数组及队列(1)
- dockerfile 之触发器 ONBUILD