SpringBoot事物管理

ITK-snap进行分割区域标注、三维显示及改变显示颜色 在进行医学图像器官分割时,无论我们是用传统方法还是深度学习,最后肯定要用到手动分割的区域作为金标准来验证我们方法的精度。但是手动标注器官的轮廓是十分耗时的,这里我介绍一个比较简单的标注方法,以肺分割作为例子。 我们使用ITK-snap作为分割标注工具。 当切片间距离比较小时,比如1mm,一个患者的完整HRCT序列通常在200张以上,如果让医生一一进行分割区域标注是非常耗时乏味的。因此,我们可以使用最简单的阈值法比如OSTU,加上基本的形态学操作对肺进行粗分割得到粗略的分割掩码,在此基础上再手动的对分割结果进 阅读详情

使用

Controller

@RestController
@RequestMapping("/transaction")
public class TestTransactionController {

    @Autowired
    private TestService testService;

    @RequestMapping(value = "/test", method = RequestMethod.POST)
    public Result test(FrogTest frog) {
        testService.updateAndInsert(frog);
        return new Result();
    }
}

Service

public interface TestService {

    boolean updateAndInsert(FrogTest frog);

}

@Service
public class TestServiceImpl implements TestService {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private IFrogTestService frogService;

    @Override
    public boolean updateAndInsert(FrogTest frog) {
        try {
            frogService.updateById(frog);
            frogService.save(null);
            return true;
        } catch (Exception e) {
            if(logger.isErrorEnabled()) {
                logger.error("updateAndInsert error:", e);
            }
            throw new MyException(MyExceptionEnum.DATASOURCE_ERROR);
        }
    }
}

模拟先修改在添加,update正常执行,insert时会因error sql报错。如果updateAndInsert方法为一个事物,只需给该方法加上@Transactional注解即可。

    @Override
    @Transactional
    public boolean updateAndInsert(FrogTest frog) {
        try {
            frogService.updateById(frog);
            frogService.save(null);
            return true;
        } catch (Exception e) {
            if(logger.isErrorEnabled()) {
                logger.error("updateAndInsert error:", e);
            }
            throw new MyException(MyExceptionEnum.DATASOURCE_ERROR);
        }
    }

说明

@Transactional注解应用于类和公开的方法,用于类时,该类中所有公开方法都加入事物管理。回滚RuntimeException和Error,但不回滚已检查异常。

注解中几个属性:
value:与transactionManager相同
transactionManager:指定事物管理器
propagation:事物传播
isolation:事物隔离
timeout:超时(只使用于REQUIRED和REQUIRES_NEW传播行为)
readOnly:是否只读
rollbackFor:回滚(以下四项的值为继承Throwable的类或类名)
rollbackForClassName:类名回滚
noRollbackFor:不回滚
noRollbackForClassName:设置类名不回滚

事物特性ACID
原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability):持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

事物传播行为
REQUIRED:支持当前事物,如果不存在则创建一个事物。(默认值)
SUPPORTS:支持当前事务,如果不存在则以非事务方式执行。
MANDATORY:支持当前事务,如果不存在则抛出异常。
REQUIRES_NEW:创建一个新事务,并暂停当前事务(如果存在)。
NOT_SUPPORTED:以非事务方式执行,暂停当前事务(如果存在)。
NEVER:则以非事务方式执行,如果事务存在,抛出异常。
NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于 REQUIRED。
【Spring学习34】Spring事务(4):事务属性之7种传播行为

事物隔离级别
DEFAULT:使用基础数据存储的默认隔离级别。(默认值)
READ_UNCOMMITTED:该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。如果发生回滚,则第二个事务将检索到无效行。该级别不能防止脏读和不可重复读,因此很少使用该隔离级别。
READ_COMMITTED:该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。
REPEATABLE_READ:该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。该级别可以防止脏读和不可重复读。
SERIALIZABLE:所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

这里引用其他作者描述对脏读、不可重复读、幻读的理解:


作者:Somhu
原文:https://blog.youkuaiyun.com/Somhu/article/details/78775198?utm_source=copy

脏读:所谓的脏读,其实就是读到了别的事务回滚前的脏数据。比如事务B执行过程中修改了数据X,在未提交前,事务A读取了X,而事务B却回滚了,这样事务A就形成了脏读。
也就是说,当前事务读到的数据是别的事务想要修改成为的但是没有修改成功的数据。
不可重复读:事务A首先读取了一条数据,然后执行逻辑的时候,事务B将这条数据改变了,然后事务A再次读取的时候,发现数据不匹配了,就是所谓的不可重复读了。
也就是说,当前事务先进行了一次数据读取,然后再次读取到的数据是别的事务修改成功的数据,导致两次读取到的数据不匹配,也就照应了不可重复读的语义。
幻读:事务A首先根据条件索引得到N条数据,然后事务B改变了这N条数据之外的M条或者增添了M条符合事务A搜索条件的数据,导致事务A再次搜索发现有N+M条数据了,就产生了幻读。
也就是说,当前事务读第一次取到的数据比后来读取到数据条目少。


注意的问题

Service

    @Override
    @Transactional
    public boolean updateAndInsert(FrogTest frog) {
        try {
            frogService.updateById(frog);
            frogService.save(null);
            return true;
        } catch (Exception e) {
            if(logger.isErrorEnabled()) {
                logger.error("updateAndInsert error:", e);
            }
            throw new MyException(MyExceptionEnum.DATASOURCE_ERROR);
        }
    }

    @Override
    public void update(FrogTest frog) {
        updateAndInsert(frog);
    }

如果将Service层修改为如上,Controller层先调用update方法,update在调用updateAndInsert方法,尽管后者加了@Transactional注解,方法中两个操作并不是一个事物。
因为@Transactional 的事务开启 ,或者是基于接口的或者是基于类的代理被创建。所以在同一个类中一个方法调用另一个方法有事务的方法,事务是不会起作用的。
参考:https://zhuanlan.zhihu.com/p/38208248
经过测试,update方法加上注解,updateAndInsert不加,事物起作用。

详解YOLOv5网络结构/数据集获取/环境搭建/训练/推理/验证/导出/部署 本文给大家带来的教程是利用YOLOv5训练自己的数据集,以及有关YOLOv5的网络结构讲解/数据集获取/环境搭建/训练/推理/验证/导出/部署相关的教程,同时通过示例的方式让大家来了解具体的操作流程,过程中还分享给大家一些好用的资源,我还对其中的参数进行了详细的讲解,通过本文大家可以成功训练自己的数据集,在开始之前给大家推荐一下我的YOLOv5专栏,本专栏包含上百种YOLOv5的改进机制以及如何撰写论文的教程,手把手教大家如何改进YOLOv5非常适合科研小白。 阅读详情

相关推荐

FLoRA: 基于异构低秩适应的联邦微调大语言模型

大语言模型(LLMs)的快速发展推动了人工智能的进步,预训练的LLMs可以通过微调适应各种下游任务。联邦学习(FL)通过利用客户端的本地数据进行原位计算,进一步增强了隐私保护的微调,消除了数据移动的需求。然而,考虑到LLMs的巨大参数量,微调LLMs对于资源受限且异构的FL客户端来说是一个挑战。之前的方法采用了低秩适应(LoRA)进行高效的联邦微调,但在LoRA适配器上使用了传统的FL聚合策略。这些方法导致了数学上不准确的聚合噪声,降低了微调效果,并且未能解决异构LoRA的问题。

tiger00O的博客 2066

Spring Boot事务控制

业务开发操作数据库过程中,我们基本都会涉及事务的操作,事务可以保证业务逻辑的完整性。所有的数据访问技术都有事务处理机制,这些技术提供了API用来开启事务、提交事务来完成数据操作,或者在发生错误的时候回滚数据。而Spring的事务机制是用统一的机制来处理不同数据访问技术的事务处理。Spring的事务机制提供了一个PlatformTransactionManager接口,不同的数据访问技术的事务使用不同的接口实现。

小飞侠的博客 2038

AI小智语音服务架构与嵌入式成本优化实践

语音交互系统是智能硬件的核心能力,其本质是端云协同的实时数据处理链路,涵盖音频采集、流式传输、语义理解与语音合成四大技术环节。原理上需严格划分物理层(确定性音频I/O)、协议层(WebSocket/Range可靠性通信)和语义层(ASR/LLM/TTS职责解耦),以保障低延迟与高可用。技术价值在于通过VAD前置过滤、分块下载、Token截断等嵌入式级优化,显著降低云端调用成本与网络开销。典型应用场景包括儿童故事机、智能音箱、教育机器人等对响应速度、音色自然度和单次交互成本敏感的AI小智设备。本文聚焦火山引擎

weixin_30653091的博客 351

SpringBoot事务管理

事务(Transaction)是数据库操作的一个执行单元,它要么完全执行成功,要么完全不执行。事务管理就是确保在数据库操作过程中,要么所有操作都成功提交,要么所有操作都不提交,从而保证数据的一致性和完整性。事务管理通常涉及以下几个关键概念:ACID特性、事务管理器、事务传播行为和事务隔离级别等。ACID特性ACID 是事务处理的四个基本特性,它们分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

xugehahaha的博客 2834

嵌入式设备系统日志记录及调试技巧_嵌入式日志系统(1),如何成为杰出的程序员

这里面我使用的芯片为哈弗体系,全局常量存储编译器默认分配在flash,需要注意如果使用片内flash时,注意存储调试等级的flash块不要与代码区重合,要不然修改调试等级擦除flash块同时PC指针指向当前块的代码区,会导致仪器死机;这个也是之前用的比较多的,以上代码是模仿linux 内核的写法,可以比较好的做到日志信息分层,编译时相加对应的编译开关即可。但有个弊端就是,切换debug等级时,需要重新编译且需更新固件,而嵌入式设备出现异常后更新固件往往复位后,故障有时很难复现,调试起来比较浪费时间。

2401_84240431的博客 1294

【电脑技巧】CPU正常运行时间过长,怎么解决?

目录 问题描述 解决方案 1、问题描述 不少同志都遇到过这样的问题:按【Ctrl + alt + delete】打开任务管理器,切到“性能”选项卡下,发现自己电脑的CPU正常运行时间竟然为好几十天!很多人担心这会不会影响电脑的寿命?于是很想知道这是怎么回事,以及如何解决这个问题。 我在此解答一下,这是由于你的电脑开启了“快速启动”这一选项的缘故,只要把这一选项关闭,问题就解决了。 2、解决方案 怎样关闭“快速启动”呢?按照如下的步骤来即可。 顺便声明一下,笔者的电脑配置: 使用电脑:联想Yoga 14

橄榄树下的孩子 3万+

springboot 事务控制简单理解

涉及到对于事务的控制,便仔细研究了一下,颇有所获,花费好了几天测试整理先简单介绍一下Spring事务的传播行为:所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。在TransactionDefinition定义中包括了如下几个表示传播行为的常量:然后说一下Spring事务的回滚机制:Spring的AOP即声明式事务管理默认是针对unchecked exception回滚。Spring的事务边界是在调用业务方法之前开始的,业务方法执行完毕之

无恋-zx的博客 1460

别再被systemd-resolved坑了!银河麒麟V10下用Bind9搭建内网DNS的完整避坑指南

本文详细介绍了在银河麒麟V10和Ubuntu系统下部署Bind9 DNS服务器时,如何解决与systemd-resolved的端口冲突问题。提供了五种专业级解决方案,包括彻底禁用systemd-resolved、智能端口转发等,并特别针对银河麒麟V10的安全加固需求给出了配置建议和诊断工具,帮助用户高效搭建内网DNS服务。

weixin_30342209的博客 655

SpringBoot(五)SpringBoot事务

在实际开发项目时,程序并不是总会按照正常的流程去执行,有时候线上可能出现一些无法预知的问题,任何一步操作都有可能发生异常,异常则会导致后续的操作无法完成。此时由于业务逻辑并未正确的完成,所以在之前操作过数据库的动作并不可靠,需要在这种情况下进行数据的回滚,SpringBoot提供了对这种数据回滚操作场景的支持,也就是事务。

zhaojun的博客 8717

武汉理工大学 python实验三

请编一个程序,用户在同一行内输入两个整数,代表头和脚的数量,编程计算笼中各有多少只鸡和兔(假设鸡和兔都正常,无残疾),如无解则输出`“Data Error!题目为:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?年前,《孙子算经》中记载一个有趣的问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?有一座八层宝塔,每一层都有一些琉璃灯,每一层的灯数都是上一层的二倍,已知共有。编写一个宝塔上的琉璃灯的小程序,计算并输出每层各有多少盏琉璃灯。,如果有多个解,则分行输出,每行一个解;

2401_83472225的博客 5950

Spark 大数据环境搭建( Linux 系统安装和配置)

(1)选择典型安装(2)选择“安装程序光盘映像文件(iso)”,点击右侧的浏览按钮, 找到下载好的iso 文件,然后点击下一步。(3)将全名、用户名、密码、确认等几项均设为“spark”, 方便后面使用,然后点击下一步。(4)在命名虚拟机的窗体中,可以设定一下虚拟机名称或直接按默认,然后点击下一步。(5)在指定磁盘容量的窗体中,设定虚拟机使用的最大磁盘大小为60GB,虚拟机文件尺 寸是在使用过程中按需增长的,最大限制为 60GB。

2301_80186825的博客 1605

Spring boot学习笔记之五:SpringBoot之事务管理@Transactional

1. 前言以前学ssh ssm都有事务管理service层,通过applicationContext.xml配置,在service类或所有service方法都加上事务操作;用来保证一致性,即service方法里的多个dao操作,要么同时成功,要么同时失败;springboot下的话 搞一个@Transactional即可,无需再进行配置2.编码我们这里搞一个实例,转账实例,A用户转账给B用户xx元...

HeJD的博客 3万+

WPS访问权限不足怎么解决??具体怎么操作?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值。

**My Coding Family** 4171

springboot事物管理

事物管理回归源生实际就是对connection的管理,同一个事物同一个连接来保证同一个事物的隔离,原子,一致等;spring事物管理也是建立在数据库事物基础上,通过动态代理&@Transactional管理事物。spring事物之间存在传播特性,来管理复杂业务之间事物调用关系。事物管理是通过实现事务管理接口TransactionManager来管理,通过TransactionInterceptor动态代理拦截来扩展事物管理逻辑。

月光光照大江 486

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SpringBoot事物管理器

一、springboot整合事物管理 springboot默认集成事物,只主要在方法上加上@Transactional即可 二、SpringBoot分布式事物管理 使用springboot+jta+atomikos分布式事物管理 1、pom文件 <parent> <groupId>org.springframework.b...

weixin_30275415的博客 362

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Spring Boot 25——事物管理

事物概念         我们在开发企业应用时,对于业务人员的一个操作实际是对数据读写的多步操作的结合。由于数据操作在顺序执行 的过程中,任何一步操作都有可能发生异常,异常会导致后续操作无法完成,此时由于业务逻辑并未正确的完成, 之前成功操作数据的并不可靠,需要在这种情况下进行回退。         事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异...

菜园子丶For丨丶Tomorrow的博客 283

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

spring boot(七):springboot事物管理

   springboot默认集成事物,只主要在方法上加上@Transactional即可 &lt;!-- 开启时必须配置数据库 --&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starte...

~ 450

SpringBoot Mybatis事物管理

本文主要讲述springboot提供的声明式的事务管理机制。 一、一些概念 声明式的事务管理是基于AOP的,在springboot中可以通过@Transactional注解的方式获得支持,这种方式的优点是: 1)非侵入式,业务逻辑不受事务管理代码的污染。 2)方法级别的事务回滚,合理划分方法的粒度可以做到符合各种业务场景的事务管理。 本文使用目前最常用的mybatis框架来配置springboot的事务管理机制。下面进入配置方法介绍。 二、springboot mybatis事务配置

Suunhp_N的博客 5230

spring boot 事物管理

1 问题背景 有时候,我们总是需要再SpringBoot2中对一个Service方法做一个完整的事务,发现异常时,进行回滚,然后又能返回错误信息。 事务定义 事务,就是一组操作数据库的动作集合。事务是现代数据库理论中的核心概念之一。如果一组处理步骤或者全部发生或者一步也不执行,我们称该组处理步骤为一个事务。当所有的步骤像一个操作一样被完整地执行,我们称该事务被提交。由于其中的一部分或多步执行失败,导致没有步骤被提交,则事务必须回滚到最初的系统状态。 事务特点 1.原子性:一个事务中所有对数据库的...

小萧山博客 460

Springboot——事物管理

当在deleteById事务中开启了insert事务,此时deleteById事务会被挂起,进行insert事务,当insert事务进行完成后继续运行deleteById事务。当在deleteById事务中开启了insert事务,此时deleteById事务会被挂起,进行insert事务,当insert事务进行完成后继续运行deleteById事务。两个方法都有 @Transactional注解,采用的是默认事务传播行为,需要事务,有则加入(b事务加入到a事务),无则创建新事务。成功执行完毕,提交事务;

weixin_51351637的博客 4330

Springboot 事物管理

一 使用方法: 在类上面注解@Transactional该类的所有的方法都事物; 在某个方法上面注解@Transactional 只对该方法起作用 二 事务传播行为种类 所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。 我们可以看 org.springframework.transaction.annotation...

sswltt的博客 458

SpringBoot十八:分布式事物管理

springboot+jta+atomikos 分布式事物管理 pom文件引入以下依赖 <dependencies> <!-- 使用springboot+jta+atomikos 分布式事物管理 --> <dependency> <groupId>org.springframework.boot</groupId> &lt...

379

Spring Boot 分布式事物管理

Spring Boot 分布式事物管理 前言 事务是为了保证数据的一致性而产生的。那么分布式事务,顾名思义,就是我们要保证分布在不同数据库、不同服务器、不同应用之间的数据一致性。 在单体项目下数据是存放在一个数据库上的,采用数据库的事务就能满足我们的要求。 但随着业务的不断扩张,数据的不断增加,单一数据库已经到达了一个瓶颈,因此我们需要对数据库进行分库分表。为了保证数据的一致性,可能需要不同的数据...

. 748

Spring Boot 事物管理 @Transactional

目录推荐博客引言属性value,transactionManager多事物管理器propagation传播方式isolation事物隔离级别隔离级别描述什么是脏读呢 读到了未提交的数据不可重复读和幻读的区别timeout 超时配置readOnly 制度属性rollbackFor 指定触发回滚的异常类型noRollbackFor 指定不回滚的异常类型使用案例 推荐博客 给大家推荐个靠谱的公众号程序员......

yueloveme的博客 1158

springBoot事物管理

Spring Boot 中的事务管理器是通过 AOP(面向切面编程)实现的,它可以拦截带有有 @Transactional 注解的方法,并在方法执行前后自动开启和提交事务。如果方法执行过程中发生异常,事务管理器会自动回滚事务,从而保证数据的一致性和完整性。事务是指一组操作,这些操作要么全部成功,要么全部失败。如果在一组操作中有一个操作失败了,那么整个事务都应该回滚,即撤销已经执行的操作,从而保证数据的一致性和完整性。:事务的执行不受其他事务的干扰,即并发执行的事务之间应该相互隔离。

2401_82742105的博客 368
上一篇: java8函数式编程(三)
下一篇: SpringBoot定时任务
litte_frog
博客等级 码龄9年 39粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值