signed

QiShunwang

“诚信为本、客户至上”

慢下来是为了更快

2020/8/19 22:44:27   来源:

       原本计划快一点做完这个项目,就可以提早奔赴下一个,但是,我错了......

       为什么呢?有一天,发现需要多建一个表,去存储数据,以更新原本的表中的数据,但是呢,这些数据又是临时的,把这些临时数据存储在数据库中岂不是白白浪费了持久化这个特性,等到数据过期不用时,维护表也比较麻烦。想了想,用redis缓存还可以,公司有封装好的redis接口,就直接用了。

       线上打包,发布,过了几天,现场技术支持打电话来了,说是给的包安装不上,报错sql错误,但是sql脚本没有错,打包时配置项也对,那为什么?经过撬问大佬,大佬说你把线上打的包点开看看,db文件夹放的位置对不对,不对的话,那一定找不到,果然,放错了,是因为打包时的路径不对。改过之后,可以正常安装。于是,我开开心心地去做下一个项目,可是老天何曾放过我?5分钟后,技术打电话来:“装上是可以的,但是服务它停止了!”oh,天呐,好了,不要慌张,来看看组件的other日志,发现报错是我之前建的一张表的名字,emmmm,大概知道了,是我添加的逆向工程配置文件、依赖还在,所以刚启动时,会一起执行吧,删了逆向工程一堆,就可以运行了。但是,还有个问题是页面不显示数据。好吧,我继续排查。

       由于第三方下班早,所以第二天一早,我便来到现场。怎么排查呢?

       1.直接调试吧,看,确实报错了,插入失败,仔细一看,图片的长度太小了,给它放大点,搞定。

       2.再调试,有数据了。但是,感觉怪怪的,页面显示的检测时间全部是一样的时间,再调,发现是update语句写错了,由于同一个java文件下还有用到example的,这里的update语句用的是example2,由于当时是复制过来的,这个应该是忘记加2了,好了,吃一堑,长一智吧,就把example2改成updateExample。

       3.代码里写的是用List集合接收redis里取出的数据,用迭代器遍历的,调试的时候,走到遍历这里,有时候就会直接抛出异常:java.util.ConcurrentModificationException,在网上搜了下,“在编程中经常要对ArrayList进行删除操作,在使用remove方法对ArrayList进行删除操作时,报java.util.ConcurrentModificationException异常”,又想了想,我拿到的是缓存里的数据,是不断变化的,会不会和这个有关系,顺着这个思路,再撬下大佬的嘴,嗯,大佬说可以试试for循环,来避免并发引起的问题。果然,用for循环,不报上面的错误了。

       解决了以上几个问题,我的程序又可以运行起来了,页面可以正常展示数据。

       很巧,今天我看到了一篇文章,是说redis可以实现延迟队列,结合我做的项目,如果再想做得完美点,其实也可以试试这个。

(具体怎么实现?未完待续)

       总之,做完这个项目,收货还是蛮多的,明天发布,希望一切顺利!

       有时候,慢下来,也许是为了更快,程序是这样,人也是。