从批量事务中的列表中识别失败的项目

时间:2017-07-30 16:21:59

标签: java multithreading algorithm design-patterns

尝试将项目列表批量处理为单个交易,如下所示

Lists.partition(new ArrayList()<>(customer),100).parallelStream().forEach(customers->{
                    UserTransaction userTransaction = new UserTransactionImp();
                    try {
                        userTransaction.begin();
                        for(String cus : customers){
                            //code to write to db 
                        }
                        userTransaction.commit();
                    } catch (Exception exception) {

                        //collect the failed list and re partition them into smaller lists say 50
                    }

但是我不想因为几个错误的帐户而失败所有100个。我正在考虑将失败的项目收集到另一个列表并进一步分区到小列表。我可以通过再次调用并行流来做到这一点。但是我想知道是否有任何设计模式来解决这个问题

1 个答案:

答案 0 :(得分:0)

您可以在此强制执行责任链模式
https://sourcemaking.com/design_patterns/chain_of_responsibility

创建一系列处理程序,以便在发生故障时委托给下一个处理程序。 看起来像是一种矫枉过正,但允许未来的可扩展性。