如何在单个作业中执行多个spring批处理步骤 }
我对“populateRecurringItemStep”有异议,该步骤在endloop中运行。 如何解决这个问题。。如何在单个作业中执行多个spring批处理步骤 },spring,spring-boot,spring-batch,Spring,Spring Boot,Spring Batch,我对“populateRecurringItemStep”有异议,该步骤在endloop中运行。 如何解决这个问题。。 我使用的是spring boot no-xml配置。使用flow(),而不是start(),如下所示: private static final Logger LOG = Logger.getLogger(RecurringItemProcessor.class.getName()); @Override public RecurringItem process(final
我使用的是spring boot no-xml配置。使用
flow()
,而不是start()
,如下所示:
private static final Logger LOG = Logger.getLogger(RecurringItemProcessor.class.getName());
@Override
public RecurringItem process(final RecurringItemRaw recurringItemRaw) throws Exception {
LOG.info("Processing recurring item");
final RecurringItem item = new RecurringItem();
item.setId(recurringItemRaw.getId());
item.setName(recurringItemRaw.getName());
item.setAgreementId(recurringItemRaw.getAgreementId());
if (recurringItemRaw.getCost().trim().isEmpty()){
item.setCost(BigDecimal.ZERO);
}
else{
item.setCost(new BigDecimal(recurringItemRaw.getCost()));
}
if (recurringItemRaw.getQuantity().trim().isEmpty()){
item.setQuantity(0);
}else{
item.setQuantity(new BigDecimal(recurringItemRaw.getQuantity()).intValue());
}
LOG.info(item.toString());
return item;
}
使用
start()
,而不是使用flow()
,如下所示:
private static final Logger LOG = Logger.getLogger(RecurringItemProcessor.class.getName());
@Override
public RecurringItem process(final RecurringItemRaw recurringItemRaw) throws Exception {
LOG.info("Processing recurring item");
final RecurringItem item = new RecurringItem();
item.setId(recurringItemRaw.getId());
item.setName(recurringItemRaw.getName());
item.setAgreementId(recurringItemRaw.getAgreementId());
if (recurringItemRaw.getCost().trim().isEmpty()){
item.setCost(BigDecimal.ZERO);
}
else{
item.setCost(new BigDecimal(recurringItemRaw.getCost()));
}
if (recurringItemRaw.getQuantity().trim().isEmpty()){
item.setQuantity(0);
}else{
item.setQuantity(new BigDecimal(recurringItemRaw.getQuantity()).intValue());
}
LOG.info(item.toString());
return item;
}
尝试这样做:
return jobsBuilderFactory.get("billingJob")
.incrementer(new RunIdIncrementer())
.start(fetchAgreementTasklet)
.next(fetchAgreementRecurringItemsTasklet)
.next(fetchItemsHistoryTasklet)
.next(populateAgreementStep).next(populateRecurringItemStep)
.next(populateRecurringItemHistoryStep)
.end().build();
}
尝试这样做:
return jobsBuilderFactory.get("billingJob")
.incrementer(new RunIdIncrementer())
.start(fetchAgreementTasklet)
.next(fetchAgreementRecurringItemsTasklet)
.next(fetchItemsHistoryTasklet)
.next(populateAgreementStep).next(populateRecurringItemStep)
.next(populateRecurringItemHistoryStep)
.end().build();
}
你可以添加populateRecurringItemStep配置或组件吗?我已经添加了代码,但仍然没有什么值得注意的。我猜你可以发布完整的配置,也可以发布有问题的读卡器、处理器和写卡器。现在请看一下我编辑了代码我正在逐项阅读,所以它应该返回已处理的项目。如果我返回null而不是对象,则数据库中不会保存任何项。在这种情况下,它不是一次又一次地读取同一行,而是重复所有项目,因此我希望在读取所有项目后结束..您可以添加populateRecurringItemStep配置或组件吗?我已经添加了代码,但仍然没有任何提示。我猜你可以发布完整的配置,也可以发布有问题的读卡器、处理器和写卡器。现在请看一下我编辑了代码我正在逐项阅读,所以它应该返回已处理的项目。如果我返回null而不是对象,则数据库中不会保存任何项。在这种情况下,它不是一遍又一遍地读取同一行,而是重复所有项目,因此我希望在读取所有项目后结束。
.end()
在使用start()
和next()
时不可用,它仅适用于flow()
。end()
在使用start()
和next()时不可用
,它仅适用于flow()
。