这几天一直在修并行环境的bug,也踩了不少坑, 记录一下

1、关于对集合的排序循环问题。集合被修改之后不能再用于循环

原本的逻辑是这样的,在对C代码使用Java进行翻写的时候,因为C使用的是临时表,我这边用的是List集合,然后那边直接order By,而我用的是封装的一个对集合进行排序的方法。因此该集合在某种程度上是被修改了的,但是我仍然对让它进入了下一次循环,而没有break掉,或者使用一个新的集合来进行修改,导致并行生产环境报错。在不确定集合是否被修改的情况下,一定要New一个新的List来进行修改,保持原来的List进行循环。。。。

2、spring boot redis 序列化报错 as a subtype of [simple type, class java.lang.Object]: no such class found 问题

大致场景是这样的, 有两个服务 A B, A服务用于授权, 授权成功会存储对象到redis中, B服务通过token去redis中拿到Object对象转换成业务对象。

大致原因是: A服务存储对象到redis中时候会有一个全路径类名限定,在通过token进行取对象值并强制转换的时候,如果接受对象的全路径名与redis中保存的不一致的话就会转换失败报错。

可能是因为之前项目类路径改造的时候,把这张表对应的类路径漏掉了,而redis那边不是实时从现有的数据库中获取的,而是根据我们各个业务组之前手动登记的路径进行修改的,因此并行生产出现这种问题。。。

解决办法:

1、把路径名称改成一致(使用了这个办法) 2、将保存对象的方式改成其他方式(这个存疑, 在网上看的)