首页 > 其他分享 >spring-事务案例

spring-事务案例

时间:2024-03-11 16:14:39浏览次数:27  
标签:事务 spring objs 案例 线程 service1 parallelStream

spring的案例场景
同一个事务中使用并发操作导致更新获取锁失败


@Autowired
Service service1;


@Transactional
public void methodA(){
	List<Object> objs;
	service1.deleteByid(id1);
	
	objs.parallelStream().forEach(o -> {
		UserEntity usEntity = new UserEntity();
		log.info("service1:{}", service1);
		service1.insert(usEntity);
	});
}

原因分析

1, service1.deleteByid()方法导致mysql线程创建事务,该事务获取到一个next key锁,有一段区间是(id1, \(\infty\)];
2, objs.parallelStream使用fork join pool 多线程进行任务分拆执行
3, 当objs的数量大于1时,parallelStream会使用当前线程,并另外创建一个线程执行任务
4, 另外创建的线程,因为不在当前线程中,所以属于新建的事务,新事务同时执行时就无法获取到锁

解决办法

1, objs.parallelStream() 换成 objs.stream()

标签:事务,spring,objs,案例,线程,service1,parallelStream
From: https://www.cnblogs.com/bigjor/p/18066357

相关文章

  • SpringBoot自动配置原理解析
    一、什么是SpringBoot自动配置首先介绍一下什么是SpringBoot,SpringBoost是基于Spring框架开发出来的功能更强大的Java程序开发框架,其最主要的特点是:能使程序开发者快速搭建一套开发环境。SpringBoot能将主流的开发框架(例如SpringMVC,Dubbo,Mybatis,Redis等),做到像Maven导......
  • MySQL实现事务隔离的原理
    一、readview四个字段create_trx_id:创建该readview的事务的事务idm_ids:创建readview时,当前数据库中的活跃事务(指启动但还没提交的事务)min_trx_id:m_ids的最小值max_trx_id:创建readview后,下一个事务的id二、聚簇索引的隐藏列trx_id:最近一次改动该聚簇索引记录的事务idrol......
  • springboot初始化时执行方法
    参考:http://www.360doc.com/content/23/0303/15/81790262_1070284511.shtml监听容器刷新完成扩展点ApplicationListener<ContextRefreshedEvent>ApplicationContext事件机制是观察者设计模式实现的,通过ApplicationEvent和ApplicationListener这两个接口实现ApplicationContext......
  • 【Spring】BeanDefinition 深入了解
    1 前言今天想细细研究下BeanDefinition,至于为什么,主要是看了很多遍,没太关注mergedBeanDefinition所以比较好奇,它是干啥的呢?所以得先搞清BeanDefinition,开整。2 源码分析我们得先知道BeanDefinition在Spring这个大框架下是个什么位置。我的理解它就类似于Java中的......
  • 基于vue+springboot高校宿舍管理系统
    本项目是一款基于springBoot的高校宿舍管理系统。本系统主要功能包含:(1)基本信息管理基本信息分为学生信息和宿舍信息两部分,其功能是负责维护这些信息,对它们进行增删查改等操作。宿舍分配管理(2)根据给定的宿舍信息与学生信息,按照一定的规则自动地给还未分配宿舍的学生分配宿舍,......
  • SpringBoot3.x使用Druid
    SpringBoot3.x使用DruidBiliBili视频官网:druid/druid-spring-boot-starteratmaster·alibaba/druid参考文章SpringBoot3集成Druid连接池详解起步安装最新版本查询:https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-3-starter注意:Druid配......
  • VSCode 配置 Spring Boot 项目开发环境
    神器IDEA在升级到2023之后越发卡顿,EDU邮箱也不能用了,照现在这个JDK版本的升级速度,神器不升级也不行,需要开始物色替代品.其它IDE我用得少,VSCode还是比较熟悉的,可以作为备选项.两三年前曾经试过配置Java环境,存在不少问题作罢.最近搜了下相关的文章,感觉VSCode对Ja......
  • java springboot拦截器的实现及用法
     1.前景,有时候我们在不同的地方需要使用用户的信息,我们可以使用threadLocal存储信息,这样我们在在这个线程随时使用用户信息了,不用自己在写一段冗余代码了,这时候使用拦截器就很不错 2.实现1.实现HandlerInterceptor2.重写实现方法  preHandle:在业务处理器处理请......
  • springboot3开发文档
    版本号jdk17springboot3mysql8.0mavenidea自带springboot依赖注入pom.xml命名规范:官方提供的场景:命名为:spring-boot-starter-*第三方提供场景:命名为:*-spring-boot-starter父工程坐标对各种常用依赖的版本进行了管理,我们的项目需要以这个项目为父工程,这样我们就......
  • spring-security源码-FilterChainProxy
    FilterChainProxy内部存储了我们各个HttpSecurty生成的SecurityFilterChain。FilterChainProxy实现了ServletFilter接口。只真正的入口org.springframework.security.web.FilterChainProxy.doFilterpublicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,F......