我正在使用Spring Batch(版本4.1.2)。问题如下:
1 /批处理作业是面向步骤的(2个步骤),第一步从oracle数据库加载数据(客户订单-仅有少量数据),将其过滤以进行进一步处理并将结果存储到内存对象中(orderNo-即在第二步中处理此订单)
2 /第二步,从内存中获取这些经过过滤的数据并对其进行处理-加载数据(现在已包含全部数据,已完成全部订单)并进行处理-在oracle中启动存储过程,然后调用一些外部Web服务
第一步非常快-大约5秒
第二步非常慢-每个客户订单大约需要花费10秒
数据的典型大小:第一步会加载数千个订单,并过滤大约2,000个订单。第二步要处理100-300个订单。
第一步的配置:100个订单的大块
第二步配置:块= 1
问题:如果第二步(调用Web服务)失败,则由于超时,元数据数据库事务失败。或者,如果作业完成,则元数据数据库再次失败并超时。为什么?事务超时设置为30秒。在我看来,元数据数据库的事务不受块配置的影响。
注意:订单数据库:oracle,元数据数据库:postgresql
有什么建议,解决方案等吗?
答案 0 :(得分:0)
@Transactional(传播=传播。REQUIRES_NEW)
在ItemProcessor方法上
O进程(I var1)抛出异常;
是解决问题的方法。