Spring手动提交事物

ContextLoaderListener监听器的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。至于ApplicationContext.xml这个配置文件部署在哪,如何配置多个xml文件,书上都没怎么详细说明。现在的方法就是查看它的API文档。在ContextLoaderListener中关联了ContextLoader这个类,所以整个加载配置过程由ContextLoader来完成。看看它的API说明

//通过ContextLoader获取WebApplicationContext 

WebApplicationContext contextLoader = ContextLoader.getCurrentWebApplicationContext();
            //设置属性的默认属性
            DefaultTransactionDefinition definition = new DefaultTransactionDefinition();
            //设置事务的传播行为,此处是设置为开启一个新事物
            definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
            //设置事务的隔离级别,此处是读已经提交
            definition.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
          
        for(int i=1;i<=pageCount;i++){
            /*if(i == 2){
                int j = 1/0;
            }*/
            //从spring容器对象中获取DataSourceTransactionManager,这个根据配置文件中配置的id名(transactionManager)
            DataSourceTransactionManager transactionManager = (DataSourceTransactionManager) contextLoader.getBean("transactionManager");
            //获取事务状态对象
            TransactionStatus transactionStatus = (TransactionStatus) transactionManager.getTransaction(definition);
            try{
                int offset = (i-1)*pageSize;
                orderVo.setOffset(offset);
                List<OrderTemp> list = this.orderTempMapper.grabYiHaoDianTempOrderToOrder(orderVo);
                for (OrderTemp orderTemp : list) {
                    //临时表中的状态是异步时才能导入到订单表中
                    if(orderTempConstants.OR_STATUS_ASYN.equals(orderTemp.getOrStatus())){
                        if(judgeOrOrderNum(orderTemp.getOrNum(),orderTemp.getElactPlatId()) == null){
                            
                            createOrder(orderTemp,platAssoMap,dcBranchIdMap,userId);
                        }/*else{
                            Order order = judgeOrOrderNum(orderTemp.getOrNum(),orderTemp.getElactPlatId());
                            updateOrder(orderTemp, platAssoMap, dcBranchIdMap, userId, order);
                        }*/
                        
                    }
                    

                }

                //状态刷新

                transactionStatus.flush();

                //事物提交

                transactionManager.commit(transactionStatus);

            }catch(Exception e){

               //异常回滚

                transactionManager.rollback(transactionStatus);
            }
            
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值