spring batch 使用ItemReaderAdapter导致读写无限循环问题
2017-07-20 09:25
531 查看
当同步数据时reader 或者 writer 调用现有的 service时候, 会用到ItemReaderAdapter或者ItemWriterAdapter
例如
但是上面的写法,会导致reader 和 writer 无限循环,不能停止因此需要reader 计数 重新实现 ItemStream
例如
ItemReaderAdapter adapter = new ItemReaderAdapter(); adapter.setTargetObject(orderService); adapter.setTargetMethod("dealOrder");
但是上面的写法,会导致reader 和 writer 无限循环,不能停止因此需要reader 计数 重新实现 ItemStream
public class OrderAdapterReader extends AbstractItemCountingItemStreamItemReader { @Autowired private OrderService orderService; @Autowired private HubOrderSqlOperation hubOrderSqlOperation; private List<MongoOrder> mongoOrderList; private final String ecName = "orderReaderContext"; public OrderAdapterReader() { setName(ecName); } @Override protected MongoOrder doRead() throws Exception { MongoOrder mongoOrder = mongoOrderList.get(getCurrentItemCount() - 1); return mongoOrder; } @Override protected void doOpen() throws Exception { mongoOrderList = (List<MongoOrder>) orderService.getDayOrders().getData(); if (CollectionUtils.isEmpty(mongoOrderList)){ setMaxItemCount(0); }else{ List<Long> orderIds = mongoOrderList.stream().map(MongoOrder::getId).collect(Collectors.toList()); hubOrderSqlOperation.deleteOrderByIds(orderIds); setMaxItemCount(mongoOrderList.size()); } } @Override protected void doClose() throws Exception { if (!CollectionUtils.isEmpty(mongoOrderList)){ mongoOrderList.clear(); } setMaxItemCount(0); setCurrentItemCount(0); } }
相关文章推荐
- 使用C++标准库sort自定义比较函数导致死循环问题
- Effective C# Item29:只有当新版基类导致问题时才考虑使用new修饰符
- 解决RecycleView Adapter使用notifyItemRemoved造成Position混乱的问题。
- Mac Air Ubuntu 登陆界面无限循环问题 以及 root用户无法使用命令问题
- 使用C++标准库sort自定义比较函数导致死循环问题
- 关于ListView中多个EditText之间相互联动导致无限循环问题的解决方法
- 在并发环境下使用HashMap导致的线程死循环问题
- adapter 中使用 getItemViewType 遇到的问题
- 不正当使用HashMap导致cpu 100%的问题追究(HashMap死循环探究)
- Effective C# Item29:只有当新版基类导致问题时才考虑使用new修饰符
- Android:Adapter中设置多种type的item的LayoutParams导致的convertView复用异常的问题
- 解决spring mvc +hibernate整合时使用jackson返回json数据无限循环问题的官方解决方案
- Viewpage的.setCurrentItem 导致UI线程的执行阻塞问题 广告轮播 数据加载后填充viewpagerAdapter
- 从源码角度分析Spring batch里ItemReader的使用
- 集合已修改;枚举操作可能无法执行。使用foreach 循环删除DataRow的时候的问题! 该死的AcceptChanges() Row.elete() Remove(Row)使用不同。
- Effective C# 只有当新版基类导致问题时才考虑使用new修饰符
- 在ssh框架中使用log4j导致的问题
- MOSS列表事件监听中再次更新列表项内容 SPListItem.Update() 导致循环
- Repeater的ItemCommand使用的问题
- gridview中使用edit命令显示EditItemTemplateColumn,绑定Listbox的值问题