0

我正在使用 Spring Batch(版本 4.1.2)。问题如下:

1/批处理作业是面向步骤的(2个步骤),第一步从oracle数据库加载数据(客户订单-唯一的少量数据),过滤它们以进行进一步处理并将结果存储到内存对象中(orderNo -即在第二步处理这个订单)

2/ 第二步从内存中获取这些过滤后的数据并处理它们 - 加载数据(现在是全量数据,全顺序)并处理它们 - 在 oracle 中启动存储过程,然后调用一些外部 Web 服务

第一步非常快 - 大约。5 秒。

第二步非常慢 - 对于每个客户订单,大约需要。10 秒。

数据的典型大小:第一步加载大约数千个订单和过滤器。100-300个订单在第二步做进一步处理。

第一步的配置:100 个订单的块

第二步的配置:chunk = 1

还有问题:如果第二步(调用web服务)失败,元数据库事务会因为超时而失败。或者,如果作业正常完成,元数据数据库将再次因超时而失败。为什么?事务超时设置为 30 秒。在我看来,元数据库的事务不受块配置的影响。

注:订单数据库:oracle,元数据库:postgresql

请问有什么建议、解决方案等吗?

4

1 回答 1

0

@Transactional(传播=传播.REQUIRES_NEW)

在 ItemProcessor 方法上

O 进程(I var1) 抛出异常;

是问题的解决方案。

于 2019-11-07T12:44:29.697 回答