项目背景
项目中,需要将远程文件(多个)拉取到本地,并保存本地文件路径到数据库,供后续业务使用,路径存储分两个字段,一个存储基本路径,一个存储文件名。.
采坑过程
由于文件是多个,且本地文件名称使用UUID重新生成,在拉取文件的过程中,使用List
暂存文件路径,在入库是,开始使用 List.toString进行转化后入库,但是发现转化后的数据存在[],后续取值后需要再次处理,与是想到直接去掉[],最终处理方法为
StringUtils.strip(localFileNames.toString(),"[ ]")
存在问题
在线上实际操作过程中,发现业务无法正常进行,进行日志查找,定位问题为,本地文件路径不对,导致文件读取异常,经过路径分析,发现在业务处理时,拼接出的文件本地路径,文件名称部分存在空格,导致路径不对,对代码进行排查,发现使用StringUtils.strip转换出来的文件名称,每个,分割符后面存在空格,进而导致读取文件存在错误
解决办法
在开发过程中,由于思维连贯性,在使用toString对list进行转换时,发现存在[]的情况,只想着如何去掉[]了,实际上将List转String有更好的方法,终止修改后,使用的方法为:
String.join(",", localFileNames)
并且为进一步防止空格的问题,在进行路径拼接的地方使用trim进行过滤:
filePath + it.next().trim()
*总结
虽涉及到的技术很基础,但是毕竟到线上出现问题还是浪费的时间去排查处理,在版本更新前,只能通过人工的方式去掉数据库里存在空格的数据,还是造成的不好的影响,产生这种问题的主要原因有
- 业务开发流程中,不够重视细节,在测试时,只关注整体流程的完好性,测试的时候使用的单个文件,导致问题没有提前暴露
- 思维连贯性太强,在遇到问题时,只是去想着解决新出现的问题,并没有从头去考虑问题,也许从开始就错了