如何在单个作业中执行多个spring批处理步骤 }

如何在单个作业中执行多个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

我对“populateRecurringItemStep”有异议,该步骤在endloop中运行。 如何解决这个问题。。
我使用的是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()