一、发现问题
昨天下午四点多的时候,一位同事找到我说,我所负责的系统中修改机器状态的功能不可用了。我当时是感到非常开心的,因为摸了这么多天的鱼,终于有活干了!
于是我在正式环境发了一个请求给出问题的接口,谷歌浏览器按F12,发现接口报错了,Http的返回码是500,很显然这是服务端报错。然后我查看报错的信息,发现:
原来报错的原因是:
'<>' operator is not allowed for source level below 1.7
出错的代码是:
List<Server> serverList = new ArrayList<>;
很显然这是与JDK版本的问题有关。
二、解决问题
由于这行代码是我为了完成公司安全组的需求——记录所有写操作日志而写出来的,我是想把被修改了状态的Server的信息保存到一个List里面,然后将List记录到日志里。当时在本地写完并测试通过后,是没有问题的,所以才发版上线。毕竟我本地的编译环境是JDK1.8,所以显然没有问题。但是到了线上,由于项目太老,其JDK低于1.7,就不支持在JSP页面里面使用’<>'了。
由于我担心修改了线上的JDK版本导致其他一些版本不兼容的Bug出现,就干脆把这行代码删掉了,换成了StringBuffer类去做Server的信息记录。测试通过后再发版上线,就把Bug解决了,日志记录也是正常且美观。
三、启发
这个Bug虽然没有造成重大损失,但它给了我一些启发。在维护一个老项目的时候要考虑到老项目使用技术的版本与当前主流技术版本的兼容问题,对于Java开发者而言,特别是要弄清老项目的JDK版本,这对于以后写出少Bug的代码事半功倍。