首页 > 其他分享 >Spring 数据处理中的事务级别

Spring 数据处理中的事务级别

时间:2022-10-15 04:22:05浏览次数:93  
标签:事务 uid Spring mlsListing listing 数据处理 new 级别

在 Spring 项目中,如果使用了 Spring 的事务管理的话。

默认的事务级别都在类,这个级别的,这就导致了,如果在循环中对数据进行处理的话,如果循环不结束,事务是不会提交的。

如果出现了事务堆积的情况,大概率就会锁表,然后整个服务抛出异常。

如下面的代码:

    public void assignMlsListingUid() {
        List<MlsListing> mlsListingList = mlsListingRepository.findAllByUidIsNull();

        // Loop MlsListing to get UID assigned
        for (MlsListing mlsListing : mlsListingList) {

            try {
                MlsListingCtx mlsListingCtx = ListingUtils.listingDeserialization(mlsListing.getMlsCtx());

                String uid = mlsListing.getUid();
                String addressOneLine = mlsListingCtx.getAddress().getAddressOneLine();

                Listing listing = listingRepository.findDistinctFirstByAddressOneLineEqualsIgnoreCase(addressOneLine);

                if (ObjectUtils.isNotEmpty(listing)) {
                    uid = listing.getUid();
                } else {
                    uid = UUID.randomUUID().toString();
                    listing = new Listing();
                    listing.setAddressOneLine(addressOneLine);
                    listing.setUid(uid);
                    listing.setDateCreate(new Date());
                    listing.setDateUpdate(new Date());

                    listingRepository.save(listing);
                }

                mlsListing.setUid(uid);
                mlsListing.setDateUpdate(new Date());
                mlsListingRepository.save(mlsListing);

            } catch (JsonProcessingException e) {
                log.error("Parse Mls-Listing Ctx Error", e);
                mlsListingRepository.delete(mlsListing);
            }

        }

    }

这个方法,在循环执行完成之前是不会提交事务的。

 

trans

 

上面的代码只要部署到服务器上,一旦需要处理的量稍微大一点点,肯定锁表。

解决办法

解决办法就是把循环从 Services 层中拿出来。

放到另外一层,这样的话就能够在循环中进行提交。

https://www.ossez.com/t/spring/14147

标签:事务,uid,Spring,mlsListing,listing,数据处理,new,级别
From: https://www.cnblogs.com/huyuchengus/p/16793468.html

相关文章

  • SpringMVC项目访问时不进Controller层也不报错
    真的真的真的被自己蠢到了1、出现的问题闲来无事准备复习一下SpringMVC的内容,于是就导入一个SpringMVC项目,但是输入访问路径时报了404,控制台也无任何报错信息。2、尝......
  • SpringBoot整合
    1、JedisPoolConfig(这个是配置连接池)2、RedisConnectionFactory这个是配置连接信息,这里的RedisConnectionFactory是一个接口,我们需要使用它的实现类,在SpringData......
  • 基于springboot高速公路收费管理系统的设计设计与实现-计算机毕业设计源码+LW文档
    摘  要通篇文章的撰写基础是实际的应用需要,然后在架构系统之前全面复习大学所修习的相关知识以及网络提供的技术应用教程,以高速公路收费管理的实际应用需要出发,架构系......
  • 基于springboot的永加乡精准扶贫信息管理系统设计与实现-计算机毕业设计源码+LW文档
    摘要:本精准扶贫信息管理系统是针对目前精准扶贫信息管理的实际需求,从实际工作出发,对过去的精准扶贫信息管理系统存在的问题进行分析,完善用户的使用体会。采用计算机系统来管......
  • Log4j日志输出级别
    1、LOG4J概述1.1导入log4j的包Log4j有三个主要的组件:Loggers(记录器),Appenders(输出源)和Layouts(布局)。这里可简单理解为日志类别,日志要输出的地方和日志以......
  • springMVC 总结 以及ssm整合
    SpringMVC概述:SpringMVC是一种基于Java实现MVC模型的轻量级Web框架springMVC涉及到的坐标导入servlet坐标 这里一定要设置scope标签否则将会报错<dependency>......
  • springMvc 整合ssm 和全局异常处理器类编写 和拦截器编写
    ssm整合步骤  1创建Maven工程项目添加依赖   2在config包中编写servlet配置类继承AbstractAnnotationConfigDispatcherServletInitializer并重写类中3......
  • ALV 单元格级别控制编辑
    效果:代码:DATA:BEGINOFGS_DATA.INCLUDESTRUCTURESPFLI.DATA:CELL_STYLETYPELVC_T_STYL,"为内表添加设置编辑状态所需的字段ENDO......
  • SpringBoot集成Xxl-Job
    Xxl-Job介绍开源社区:https://www.xuxueli.com/xxl-job下载地址:https://gitee.com/xuxueli0323/xxl-job.gitXXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、......
  • spring学习笔记
    2022年10月14日开始学习02为什么要学spring?使用企业级开发,简化开发IocAop技术框架整合mybatishibernate....03初识Spring官网:https://spring.io/......