尝试将项目列表批量处理为单个交易,如下所示
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个。我正在考虑将失败的项目收集到另一个列表并进一步分区到小列表。我可以通过再次调用并行流来做到这一点。但是我想知道是否有任何设计模式来解决这个问题
答案 0 :(得分:0)
您可以在此强制执行责任链模式:
https://sourcemaking.com/design_patterns/chain_of_responsibility
创建一系列处理程序,以便在发生故障时委托给下一个处理程序。 看起来像是一种矫枉过正,但允许未来的可扩展性。