标签: itemprocessor

Spring Batch:一个阅读器,多个处理器和编写器

在Spring批处理中,我需要将ItemReader读取的项目传递给两个不同的处理器和编写器.我想要实现的是......

                        +---> ItemProcessor#1 ---> ItemWriter#1
                        |
ItemReader ---> item ---+
                        |
                        +---> ItemProcessor#2 ---> ItemWriter#2

这是必要的,因为通过ItemWriter#1写入项目应在一个完全不同的方式来处理与通过ItemWriter#2写入的那些.此外,ItemReader从数据库中读取项目,并且它执行的查询计算成本很高,因此应该丢弃执行两次相同的查询.

有关如何实现此类设置的任何提示?或者,至少,逻辑上等同的设置?

spring spring-batch itemwriter itemprocessor

19
推荐指数
2
解决办法
3万
查看次数

从spring批处理ItemProcessor返回多个项目

我正在编写一个Spring批处理作业,在我的一个步骤中,我有以下处理器代码:

@Component
public class SubscriberProcessor implements ItemProcessor<NewsletterSubscriber, Account>, InitializingBean {

    @Autowired
    private AccountService service;

    @Override public Account process(NewsletterSubscriber item) throws Exception {
        if (!Strings.isNullOrEmpty(item.getId())) {
            return service.getAccount(item.getId());
        }
        // search with email address
        List<Account> accounts = service.findByEmail(item.getEmail());
        checkState(accounts.size() <= 1, "Found more than one account with email %s", item.getEmail());
        return accounts.isEmpty() ? null : accounts.get(0);
    }

    @Override public void afterPropertiesSet() throws Exception {
        Assert.notNull(service, "account service must be set");
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码工作,但我发现,有些情况下有一个以上的一些优势情况下Account每个NewsletterSubscriber被允许的.所以我需要删除状态检查并将多个传递Account给项目编写者.

我找到的一个解决方案是更改两者ItemProcessor …

java spring batch-processing spring-batch itemprocessor

10
推荐指数
2
解决办法
2万
查看次数