spring的事物

DataSourceTansactionManager

Spring与JdbcTemplate或MyBatis框架集成时,提供的事务管理器.

事物的特性:原子性,一致性,隔离性,持久性

int TRANSACTION_READ_UNCOMMITTED = 1;  未提交读
int TRANSACTION_READ_COMMITTED   = 2;  已提交读
int TRANSACTION_REPEATABLE_READ  = 4; 重复读
int TRANSACTION_SERIALIZABLE     = 8; 序列化/不可并发


rollbackFor=Exception.class 设置遇到指定的异常类型进行回滚事务,readOnly=true
一般查询数据时需要设置为true,数据库底层会对查询进行优化处理,提高查询效率.

事物的传播行为

propagation=Propagation.REQUIRED  为默认值,表示一个方法被调用时,如果已经存在一个事务中则加入这个事务,否则,开启一个新事务;

propagation=Propagation.REQUIRES_NEW表示一个方法被调用时,不管调用的方法是否存在事务,被调用方法总为自己开启一个新的事务.

关于A方法调用B方法

总结
1、如果只有A加@Transactional注解;则AB在同一事务中;
2、如果只有B加@Transactional注解;AB方法为同一类,事务失效;AB不同类,只有B有事务

原理:
spring 在扫描bean的时候会扫描方法上是否包含@Transactional注解,如果包含,spring会为这个bean动态地生成一个子类(即代理类,proxy),代理类是继承原来那个bean的
此时,当这个有注解的方法被调用的时候,实际上是由代理类来调用的,代理类在调用之前就会启动transaction。然而,如果这个有注解的方法是被同一个类中的其他方法调用的,那么该方法的调用并没有通过代理类,而是直接通过原来的那个bean,所以就不会启动transaction,我们看到的现象就是@Transactional注解无效。

那回到一开始的问题,我们调用的方法A不带注解,因此代理类不开事务,而是直接调用目标对象的方法。当进入目标对象的方法后,执行的上下文已经变成目标对象本身了,因为目标对象的代码是我们自己写的,和事务没有半毛钱关系,此时你再调用带注解的方法,照样没有事务,只是一个普通的方法调用而已。
简单来说,内部调用本类方法,不会再走代理了,所以B的事务不起作用。

如果AB不同类,A调用的事代理类B,故B有事务。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/201860.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

App的测试,和传统软件测试有哪些区别?应该增加哪些方面的测试用例?

从上图可知,测试人员所测项目占比中,App测试占比是最高的。 这就意味着学习期间,我们要花最多的精力去学App的各类测试。也意味着我们找工作前,就得知道,App的测试点是什么,App功能我们得会测试&#xff0…

使用idea中的Live Templates自定义自动生成Spring所需的XML配置文件格式

文章目录 一、引言&问题描述二、解决方案 一、引言&问题描述 在使用Spring来管理对象时,我们需要创建Spring的配置文件applicationContext.xml,如下图位置: 在resources目录下选择new->File 或 使用idea自带模板new->XML Con…

hugging face下载dataset时候出现You must be authenticated to access it.问题解决

Cannot access gated repo for url https://huggingface.co/tiiuae/falcon-180B/resolve/main/tokenizer_config.json. Repo model tiiuae/falcon-180B is gated. You must be authenticated to access it. 参考https://huggingface.co/docs/huggingface_hub/guides/download …

Android : GPS定位 获取当前位置—简单应用

示例图: MainActivity.java package com.example.mygpsapp;import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat;import android.Manif…

CentOS7安装MiniO

目录 1、简介 2、安装 2.1、Binary 2.2、RPM(RHEL)就是红帽,CentOS就用这个 2.3、DEB(Ubuntu/Debian) 2.4、创建指定的目录并且将下载的安装包上传上去 3、启动MiniO服务 3.1、脚本如下: 4、进入服务…

汽车悬架底盘部件自动化生产线3d检测蓝光三维测量自动化设备-CASAIM-IS(2ND)

随着汽车工业的不断发展,对于汽车零部件的制造质量和精度要求也在不断提高。汽车悬架底盘部件作为汽车的重要组成部分,其制造质量和精度直接影响到整车的性能和安全性。因此,采用CASAIM-IS(2ND)蓝光三维测量自动化设备…

机器学习与 S3 相集成 :释放数据的力量

文章作者:Libai 引言 在当今数据驱动的世界中,企业不断寻求如何高效利用企业自身所产生的数据的解决方案。机器学习已经成为一种提取有价值的见解和做出数据驱动决策的强大工具。然而,机器学习模型的成功在很大程度上依赖于高质量数据的可用…

基于Vue.js的厦门旅游电子商务预订系统的设计和实现

项目编号: S 030 ,文末获取源码。 \color{red}{项目编号:S030,文末获取源码。} 项目编号:S030,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 景点类型模块2.2 景点档案模块2.3 酒…

【开源视频联动物联网平台】视频AI智能分析部署方式

利用视频监控的AI智能分析技术,可以让视频监控发挥更大的作用,成为管理者的重要决策工具。近年来,基于视频监控的AI分析算法取得了巨大的发展,并在各种智慧化项目中得到了广泛应用,为客户提供更智能化的解决方案。 然…

【智能算法】季节优化算法Seasons optimization algorithm【2023最新智能优化算法合集】

本文介绍了一种基于成吉思汗鲨鱼(Genghis Khan shark,GKS)行为的自然启发的元启发式算法(MA),称为成吉思汗鲨鱼优化器(Genghis Khan shark optimizer,GKSO),用于数值优化和工程设计。GKSO的灵感来自于GKS的捕食和生存行为。该成果…

进程间通信基础知识【Linux】——上篇

目录 一,理解进程之间的通信 1. 进程间通信目的 2. 进程间通信的技术背景 3,常见的进程间通信 二,管道 1. 尝试建立一个管道 管道的特点: 管道提供的访问控制: 2. 扩展:进程池 阶段一&#xff1a…

【实验】配置用户自动获取IPv6地址的案例

热门IT课程-试听视频文章浏览阅读49次。认证课程介绍:华为HCIA试听课程 : 华为HCIA试听课程:华为HCIA试听课程:华为HCIP试听课程:思科CCNA试听课程:思科CCNA试听课程:思科CCNA试听课程&#xff…

回归预测 | MATLAB实现基于LightGBM算法的数据回归预测(多指标,多图)

回归预测 | MATLAB实现基于LightGBM算法的数据回归预测(多指标,多图) 目录 回归预测 | MATLAB实现基于LightGBM算法的数据回归预测(多指标,多图)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLA…

高效办公:如何使用视频剪辑工具批量转码,mp4视频到TS视频

在视频处理过程中,转码是一项常见的任务。将MP4视频转换为TS视频可以提供许多优势,包括更好的兼容性、更广泛的设备和平台支持以及更高的视频质量。然而,手动转码大量视频文件可能会非常耗时且效率低下。为了实现高效办公,可以使用…

内存函数​(memcpy、memmove、memset、memcmp)

目录 一、memcpy的使用和实现 使用: 模拟实现: 二、memmove 使用和模拟实现 模拟实现: 2.1难点: 覆盖拷贝所在的问题 memset的使用 memcmp的函数的使用​ 一、memcpy的使用和实现 memcpy 拷贝的就是不重叠的内存。 参数…

webpack如何处理浏览器的样式兼容问题postcss

一、准备工作 css/index.css添加样式 .word {color: red;user-select: none; } 为了兼容不同的浏览器我们需要添加前缀比如: -webkit-user-select: none; 这个工作可以通过postcss的插件postcss-preset-env处理 二、安装依赖 pnpm i -D postcss postcss-loader…

TCP 连接建立

1:TCP 三次握手过程是怎样的? 客户端和服务端都处于 CLOSE 状态,服务端主动监听某个端口,处于 LISTEN 状态 第一次握手:客户端带着序号和SYN为1,把第一个 SYN 报文发送给服务端,客户端处于 SYN-…

C库函数—sprintf

函数介绍: C 库函数 int sprintf(char *str, const char *format, ...) 发送格式化输出到 str 所指向的字符串。 参数: str -- 这是指向一个字符数组的指针,该数组存储了 C 字符串。format -- 这是字符串,包含了要被写入到字符串 …

[架构之路-254]:目标系统 - 设计方法 - 软件工程 - 软件设计 - 架构设计 - 全程概述

目录 一、软件架构概述 1.1 什么是软件架构 1.2 为什么需要软件架构设计 1.3 软件架构设计在软件设计中位置 (1)软件架构设计(层次划分、模块划分、职责分工): (2)软件高层设计、概要设计…

JVM执行引擎以及调优

1.JVM内部的优化逻辑 1.1JVM的执行引擎 javac编译器将Person.java源码文件编译成class文件[我们把这里的编译称为前期编译],交给JVM运行,因为JVM只能认识class字节码文件。同时在不同的操作系统上安装对应版本的JDK,里面包含了各自屏蔽操作…