首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring 数据处理中的事务级别

Spring 数据处理中的事务级别

原创
作者头像
HoneyMoose
发布2022-10-15 04:52:32
发布2022-10-15 04:52:32
56300
代码可运行
举报
文章被收录于专栏:CWIKIUSCWIKIUS
运行总次数:0
代码可运行

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

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

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

如下面的代码:

代码语言:javascript
代码运行次数:0
运行
复制
    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);
            }

        }

    }

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

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

解决办法

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

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决办法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档