2019年11月18号来浙江给一个项目做维护,其中做一个报表功能(这个项目我几乎全在做报表),然后今天2020年1月7日,客户反馈一个报表的导出功能不能用。
随即,我立刻用本机的代码测试了一下,导出功能是可以用的,然后项目经理兼技术老大M则给我说可能是我打包打漏了或不完整,好吧,确实这有可能,毕竟现在维护的是一个Web项目,技术老但项目很大(是给一个省服务的项目,数据也大),所以这边项目组是每写好一个模块就把那个模块打成Jar包发给另一位同事L更新到线上项目,而我是用IDEA的,发现给Web项目的单个class文件或jsp打包是不会自动生成文件所在的目录的,只能自己手动创建目录,而他们用myeclipse打包却能自动给单个文件生成其中的目录,如下图。
所以过来的开始一段时间,我是直接把写好的代码更新到SVN再找一位同事把改好的代码拉取下来,再让他用myeclipse打包;但总这样别人也会觉得麻烦,后面我就自己用IDEA把整个项目打包就要完整的路径了,然后把项目里面的其他文件全删除只留下我自己改的那几个文件。
因此,这次本机有导出文件有数据而线上导出的Excel文件却没有数据,我和项目老大的第一想法都是打包有问题,然后到了下班时间重新打包,发现线上的项目还是导出没有数据,负责更新线上项目的同事L则说你是不是少打包了,我又和他核对了我改的功能,确实没少打啊,打包又折腾了几下还是不行,最后直接把整个模块更新,线上的项目打出还是没数据。。。
同时L则开始怀疑,是不是线上的数据表结构之类的你没更新,我又一想这也不对啊,数据都能查出来不可能还导不出来的啊,然后我们用本地代码连接到正式库却可以导出数据,那么这就排除了数据表结构的问题。
然后同事L把那几个文件的代码拉到自己本机测试,导出功能也是可以的,那么代码应该是没问题,为什么线上的功能却不起作用呢?同时L开始怀疑是不是自己没更新出来?并开始清除缓存,但又发现一次更新多个文件,其他功能都起效了,唯独我的导出功能有问题呢?而线下测试又是可以的,缓存之类的也清了,为何线上就是不可以呢?
随即,同事L开始请教已经下班回家的技术老大M,老大M说,你们线下功能没问题,数据库也没问题,更新也确实更新上去了,功能却依然不出来,而且全部代码都在try{}catch{}里也没抛出,网页前端F12也没出错,那么就把把导出功能的SQL语句和方法全打桩再发布到正式环境,看看是不是哪个方法没进去或者SQL语句有问题?
这时,我重新审视了我的代码,发现之前做这个导出功能时,看到以前别人做的导出报表从前端获取的中文查询条件传到后台都会乱码,
"rep_period" : "上åŠå¹´" //从前台传过来的这个查询条件是乱码的
而别人做的导出功能里都没对这个乱码做改正,导致线下的导出功能都是导不出数据的。我当时做导出功能时还把这个问题向老大M反映过,他也说自己在线下测试确实导不出,但为什么线上的客户没人向我反映呢?告诉我可能是这个功能太少人用了吧?就叫我自己把那些乱码改正。我改了几个报表,发现有十多个报表都没做乱码改正而且也不是我写的方法,凭什么要我改呢?况且也确实没客户反应这个错误,所以我也就没改,只把自己做的导出功能的查询条件乱码改过来了…
现在我做的这个报表上线却导出的文件里没有数据,我突然想到是不是线上的项目会自动把中文乱码转换成正确的?而我已经转换成中文反而又会再次转换为乱码?最后,在正式环境的打桩输出中看到了SQL语句里确实有乱码,这就证明了我的猜测是正确的,线上的项目会自动将乱码转换,而我已经转换正确的中文反而会添乱, 随即,我把我的代码改回来,不做乱码处理,就让它继续乱码,再更新到线上项目,发现导出的文件终于有数据了。
线上的项目竟然会自己进行转换,这什么SB项目?还有这种机制,而且这个问题我当时做的时候还问了老大M的,他竟然也不知道这个问题吗?要么就是线上的项目有某种配置文件描述了进行转换,而我拉取的项目里却没有这个配置文件?
就这一个渣渣转换机制,让我和同事L用了3个小时来排查问题。
最后,我终于想通了,继续呆着这个项目或做维护项目的工作是没前途的,完全不熟悉整个项目,而且对熟悉开发历程毫无帮助,所以还是打算搞完这个项目就去辞职。
2020-01-07
来源:CSDN
作者:daponi
链接:https://blog.csdn.net/daponi/article/details/103881892