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-事务案例的更多相关文章

  1. Spring 事务管理案例

    事务管理简介   Spring 事务管理有两种方式:一种是编程式事务管理,即通过编写代码实现事物管理,包括定义事务的开始,程序正常执行后的事物提交,异常时进行的事务回滚.另一种是基于AOP技术实现的声 ...

  2. 通过实际案例摸清楚Spring事务传播的行为

    @ 目录 事务传播 案例准备 案例解析 1.无事务 2. Propagation.REQUIRED 3. Propagation.SUPPORTS 4. Propagation.MANDATORY 5 ...

  3. spring事务源码研读1

    转载摘录自:Spring事务源码分析(一)Spring事务入门 有时为了保证一些操作要么都成功,要么都失败,这就需要事务来保证. 传统的jdbc事务如下: @Test public void test ...

  4. Spring 事务管理笔记

    本文为 Spring 框架的事务管理学习笔记,官网文档地址为:Transaction Management,隔离级别及传播属性解释来自 org.springframework.transaction. ...

  5. Spring事务源码阅读笔记

    1. 背景 本文主要介绍Spring声明式事务的实现原理及源码.对一些工作中的案例与事务源码中的参数进行总结. 2. 基本概念 2.1 基本名词解释 名词 概念 PlatformTransaction ...

  6. spring事务管理方式,aop

    达内12 note unit 09 01 1.spring事务管理 2.spring提供了对事务管理支持 spring采用aop机制完成事务控制 可以实现在不修改原有组件代码情况下实现事务控制功能. ...

  7. spring原理案例-基本项目搭建 02 spring jar包详解 spring jar包的用途

    Spring4 Jar包详解 SpringJava Spring AOP: Spring的面向切面编程,提供AOP(面向切面编程)的实现 Spring Aspects: Spring提供的对Aspec ...

  8. Spring事务的传播行为

      本文主要介绍下Spring事务中的传播行为. 事务传播行为介绍 Spring中的7个事务传播行为: |事务行为|说明 | |:--|:--| |PROPAGATION_REQUIRED | 支持当 ...

  9. 云笔记项目-Spring事务学习_测试准备

    在做云笔记项目的过程中,顺便简单的学习了Spring的事务概念,业务以如果添加笔记,则增加用户星星数目作为例子,引入了事务的概念.类似注册送积分之类的,云笔记项目以增加笔记就送星星来说明事务.具体在添 ...

  10. Spring事务管理的四种方式(以银行转账为例)

    Spring事务管理的四种方式(以银行转账为例) 一.事务的作用 将若干的数据库操作作为一个整体控制,一起成功或一起失败.   原子性:指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不 ...

随机推荐

  1. [Gin] gin-jwt 中间件的请求流程与使用思路

    gin-jwt 中间件是对 jwt-go 的封装以适应 gin 框架.gin-jwt 对不同的请求流程有不同的 handler: 登录请求流程 是用 LoginHandler. 需要 jwt 令牌的后 ...

  2. WPF 使用 Silk 的 Direct2D 入门

    在上一篇博客的基础上,使用 dotnet 基金会新开源的 Silk.NET 库,让 Silk.NET 创建的 DX 设备和 WPF 对接渲染.接下来本文将告诉大家如何使用 Silk.NET 提供的 D ...

  3. 使用sqlcmd命令行执行.sql文件

    用微软自带的sqlcmd命令行工具,可以执行导入.以SQL Server 2016版本为例: 第一步:Win+R 键入:cmd 命令,开启命令行工具: 第二步:键入:sqlcmd -S . -U sa ...

  4. ESP32 SNTP校时

    一.连接WIFI 在进行时间同步之前,先连接WIFI #include "wifi.h" #include <string.h> #include <stdlib ...

  5. 如何在docker环境下的纯净ubuntu系统中安装最新版nginx

    原文件地址: https://www.cnblogs.com/taoshihan/p/11588269.html 视频地址: https://www.bilibili.com/video/av6898 ...

  6. 飞桨动态图PyLayer机制

    一.主要用法 如下是官方文档上的使用样例: import paddle from paddle.autograd import PyLayer # Inherit from PyLayer class ...

  7. nodejs搭建chatgpt服务

    5分钟快速搭建基于nodejs的chatgpt服务 写在前面 首先大家都知道,在国内是无法成功调用openapi的接口,甚至openai的官网都很难打开.所以如果想使用chatgpt的几乎是不可能,不 ...

  8. C 语言编程 — 异常处理

    目录 文章目录 目录 前文列表 异常处理 perror() 和 strerror() 输出异常信息 程序退出状态 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基 ...

  9. 初识上位机(上):搭建PLC模拟仿真环境

    大家好,我是Edison. 作为一个工业自动化领域的程序员,不懂点PLC和上位机,貌似有点说不过去.这里我用两篇小文带你快速进入上位机开发领域.后续,我会考虑再出一个系列文章一起玩工控上位机. 什么是 ...

  10. 使用Chrome 开发者工具提取对应的字符串

    最近在查看一个API的数据,效果很好,但是里面只有一部分我想要的内容 如果是简单一点的可以直接获取 如下比如我想要提取返回的代码中关键的字符串:"video": "这里的 ...