使用场景:导入功能,向若干设备下导入若干条维护标准,如果设备A初始时没有值,我们假设导入Excel中的所有标准项都是有效的,那么就可以全部一次导入;如果设备A有设备,那么就无法导入任何一条新设备,无论待导入标准是否有效。
实现逻辑很简单:首先判断A是否存在标准,查表后返回一个list<>,如果list<>为null或者size()=0,说明该设备下没有标准,那么,本次excel导入的所有有效标准都可以被写入。
问题来源于导入框架的机制,是读取一条校验通过后直接插入数据库,导入第一条有效标准后,校验第二条时,会因为数据库中A设备下已存在最近导入的第一条标准,而拒绝导入其他数据。
解决的思路是,使用一个map<String,Boolean>来记录能否导入,当第一条设备标准导入成功时,在map中写入(key:设备编号,value:true),这样第二条设备标准直接去查询map,若map中已有该设备编号,说明一开始该设备下时没有标准的,于是第二条也能导入。如果第一条设备标准导入失败,就把boolean写为false,这样第二条同设备下的标准查询到为false,就拒绝写入。
这样处理后,能够正常走完逻辑了,但是如果在导入一份比较大量的数据时,是需要一些时间的,map中也已经赋了一些值,这时有第二个人,又调用了这个导入接口进行导入,这样他启动时会读取map,能够修改这个map里面的内容,这样就出现了多线程问题。
考虑使用ThreadLocal线程本地变量解决该多线程问题。详见后续博文。
使用ThreadLocal解决多线程问题(一)
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...