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首发!


版权声明:本文为qq_29373343原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。