parallelStream与事务

多线程事务-java的Lamda的parallelStream与事务

parallelStream与事务

parallelStream与steam的介绍不再赘述。关于使用多线程对数据处理是常见场景,事务也必不可少,遂此文出现。

场景:excel导入

使用EasyExcel进行数据入库,对数据校验较多,数据量较大,需要引入多线程。

        //事务状态
        List<TransactionStatus> transactionStatuses 
        = Collections.synchronizedList(new ArrayList<TransactionStatus>());

        try{
            EasyExcel.read(multipartFile.getInputStream(), A.class,
                    new AnalysisEventListener<A>() {

                        public void invoke(A object, AnalysisContext context) {
                           
							//业务
                        }
                        @Transactional
                        public void doAfterAllAnalysed(AnalysisContext context) {
                            log.info("验证数据准确性");
                            
                            dataMap.entrySet().parallelStream().forEach(entry->{

								//手动定义事务
                                DefaultTransactionDefinition def =
                                 new DefaultTransactionDefinition();
                                TransactionStatus status = 
                                transactionManager.getTransaction(def); // 获得事务状态
                                transactionStatuses.add(status);

								//业务
                              
                            });
                            log.info("数据入库完成");
                        }
                    }).sheet().doRead();
         
        }catch (Exception e){
            e.printStackTrace();
            log.error("excel解析错误");
            //全部rollback
            TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
        }

更多参考

多线程事务

总结

多线程事务结合parallelStream首发!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值