Spring事务失效场景总结

Spring事务的嵌套的详细理解,以及事务失效的场景解惑 Spring事务、Spring事务的传播属性、事务的嵌套、以及Spring事务失效的场景举例 阅读详情

之前面试时问到这个问题,明明以前学习过但是基本都忘记了,在此记录(文章部分内容参考IT老哥B站视频)。

1、事务方法的访问修饰符非public

Java访问权限修饰符共有:private、default、protected、public,Spring中,仅被public修饰的方法事务才会生效,如果方法被错误的访问权限修饰符修饰,事务不生效。

@Service
public class UserService {
    @Transactional
    private void add(UserModel userModel) {
         saveData(userModel);
    }
}

2、方法被final或static所修饰

Spring中事务管理使用了动态代理机制,如果方法被final和static关键字修饰,则无法重写,也就无法被代理,所以事务不生效。

@Service
public class UserService {
    @Transactional
    public final void add(UserModel userModel) {
         saveData(userModel);
    }
    @Transactional
    public static void update(UserModel userModel) {
         updateData(userModel);
    }
}

3、在类的内部直接调用方法

Spring中事务管理使用了动态代理机制,在类的内部,直接调用成员方法不会调用动态代理方法,所以事物不会生效。

@Service
public class UserService {
    
    public void add(UserModel userModel) {
         saveData(userModel);
    }
    @Transactional
    public void saveData(UserModel userModel) {
        //一系列操作...
    }
}

当然,如果在add方法上也加入 @Transactional注解,事务即可生效,但此时生效的事务为add方法的事务。

或者直接在类中注入自己,也可以让事物生效,并且Spring处理了循坏依赖问题,并不会导致报错。

@Service
public class UserService {
    
    @Autowired
    private UserService userService;
	
    public void add(UserModel userModel) {
         userService.saveData(userModel);
    }
    @Transactional
    public void saveData(UserModel userModel) {
        //一系列操作...
        //此时事务管理会生效
    }
}

4、多线程调用方法

启用多线程后同时操作数据库,会导致同时创建多个数据库连接,事务是依赖数据库连接的,多个数据库连接会导致同时开启多个事务,所以会导致事务管理回滚失败。

@Service
public class UserService {
 
    @Autowired
    private UserMapper userMapper;
    @Autowired
    private RoleService roleService;
 
    @Transactional
    public void add(UserModel userModel) throws Exception {
        userMapper.insertUser(userModel);
        new Thread(() -> {
            roleService.doOtherThing();
        }).start();
    }
}
 
@Service
public class RoleService {
 
    @Transactional
    public void doOtherThing() {
        System.out.println("保存role表数据");
    }
}

5、事务方法所在的类必须由Spring管理

Spring无法获取Bean,也就无法代理,事务不生效。

//@Service 被注释
public class UserService {
    @Transactional
    private void add(UserModel userModel) {
         saveData(userModel);
    }
}

6、异常被手动处理

必须由Spring自动处理或统一处理的异常才会被事务回滚,使用try/catch手动处理的异常不会回滚。

情景一:update方法没有异常处理,发生异常不会导致add方法回滚

@Service
public class UserService {
    @Transactional
    private void add(UserModel userModel) {
         saveData(userModel);
          try {
             updateData(userModel);
             //此处出发的异常已经被手动处理,不会回滚
        } catch (Exception e) {
        }
    }
}

情景二:update方法需要异常处理,发生异常只会导致uodate方法回滚,不会导致add方法回滚

@Service
public class UserService {
    
    @Autowired
    private UserService userService;
    
	 @Transactional
    public void add(UserModel userModel) {
         saveData(userModel);
          try {
             userService.updateData(userModel);
             //此处出发的异常已经被手动处理,不会回滚,但
        } catch (Exception e) {
        }
    }
    @Transactional
    public void updateData(UserModel userModel) {
        //一系列操作...
        //此时事务管理会生效
    }
}

7、使用了自定义的异常回滚处理

Spring可以自定义处理那种异常,如果定义错误,则不处理。

@Service
public class UserService {
   
    @Transactional(rollbackFor = BusinessException.class)
    private void add(UserModel userModel) {
         saveData(userModel);
         throw new OtherException();
    }
}

8、使用的数据表类型不支持事务

老版本的MySQL数据库会将myisam作为默认表类型,但是此类型并不支持事务管理,所以即使Spring工程代码无任何错误,数据依旧无法回滚。

9、未开启事务管理

SpringBoot框架自动开启事务管理,但Spring必须手动修改配置开启事务。

spring事务失效的11种场景 1 访问权限问题: java的访问权限有4种:private、default、protected、public,它们的权限从左到右,以此变大。如果在开发中,将事务方法定义了错误的访问权限,则事务功能会失效。 @Service public class EmpService { @Transactional private void add(UserModel userModel){ saveData(userModel); } } 如上:add方法的权限被定 阅读详情

相关推荐

spring - 十二种事务失效场景

在使用@Transactional注解声明事务时,有时我们想自定义回滚的异常,spring也是支持的。可以通过设置rollbackFor参数,来完成这个功能。但如果这个参数的值设置错了,就会引出一些问题save(demo);上面是我们自定义的业务异常,如果在执行上面这段代码,保存和更新数据时,程序报错了,抛了SqlException、DuplicateKeyException等异常。

子笙的博客 1336

Spring事务失效的各种场景

Spring事务失效可能会导致数据不一致和错误的结果。在本文中,我们讨论了几种常见的Spring事务失效场景,包括不合适的事务传播行为、异常未被捕获或未抛出、方法内部调用不会触发事务、事务方法被同类中的非事务方法调用、事务方法被同类中的静态方法调用以及事务方法被外部类中的方法调用。我们提供了详细的解释和Java示例,并介绍了如何通过适当的配置和管理事务来避免事务失效的问题。在使用Spring事务时,我们应该仔细考虑事务的传播行为,并确保在方法中正确处理异常和显式抛出异常。

果酱 の 博客 4594

海康工业相机触发模式详解:软触发 vs 外触发,在C#里如何选与用?

本文深入解析海康工业相机的软触发与外触发模式,详细比较两者的特性差异、适用场景及C#实现方法。通过海康SDK配置指南和实战代码示例,帮助开发者掌握工业相机触发模式的选择与优化技巧,提升自动化检测系统的精确性和可靠性。

weixin_42635064的博客 555

关于spring事务失效的笔记

1.访问权限问题 如果我们自定义的事务方法(即目标方法),它的访问权限不是public,而是private、default或protected的话,spring则不会提供事务功能。 2.方法用final修饰 如果某个方法用final修饰了,那么在它的代理类中,就无法重写该方法,而添加事务功能。 如果某个方法是static的,同样无法通过动态代理,变成事务方法。 3.方法内部调用 在同一个类中的方法直接内部调用,会导致事务失效。 解决方法: a.新加一个Service方法,把@Transact

qq_39357815的博客 272

Vmware虚拟机一打开就蓝屏解决方法

Vmware虚拟机一打开就蓝屏解决方法 问题: 一打开Vmware虚拟机就蓝屏,如下图所示: 解决方法1: 启用和关闭windows功能(对话框)——>虚拟机平台(选项打对勾,默认没勾选)——>确定后重启——>再进应该就好了。 解决方法2: ①.查看电脑中的Hyper-V服务是否关闭 1.打开控制面板-程序-程序和功能 2.双击启用或关闭Windows功能 3.把Hyper-V前面的勾去掉 如果后期发下没有反应,或者电脑本身Hyper-V的服务没有打开,可以先打开在关闭,试

m0_55901666的博客 26万+

某讯天御滑块验证码逆向实战:从参数解析到环境对抗

本文详细解析了某讯天御滑块验证码的逆向工程实战技巧,从关键参数解析到浏览器环境模拟对抗。重点介绍了collect、eks等参数的逆向思路,以及如何通过puppeteer等工具补全环境检测,帮助开发者有效突破验证码防护。文章还提供了常见错误解决方案和性能优化建议,是验证码逆向领域的实用指南。

weixin_29325007的博客 437

java中静态方法无法保证事务性

该方法在SpringBoot 项目启动时加载了一次,定时任务初始化时又加载了由于是静态类。该值中有一个全局变量被加载了两次,于是乎,线程池中该变量,就多了一个。造成了严重的事物问题  解决办法: 加 synchronized 修饰该静态方法      ...

编程浪子 4053

【操作系统】 Operation System 第二章:操作系统基础操作

2.1 操作系统的启动 (1)CPU, I/O, 内存通过总线连接。 (2)DISK:存放OS; BIOS:基本I/O处理系统( basic I/O system); Bootloader: 加载OS到内存中。 (3)当电脑通电时,段寄存器CS和指令寄存器IP能够确定一个内存地址,例如CS:IP = 0xf000:fff0. (4)POST(加电自检),寻找显卡和执行BIOS。(显示器,键盘…是否...

iwanderu的博客 1万+

阿里官方最新上线!Java面试八股文属于程序员的宝藏

面试题包括了:Java面试、Spring、MyBatis、ZK、Dubbo、EL、Redis、MySQL、并发编程、微服务、Linux、Springboot、SpringCloud、MQ、Kafka 面试专题。177. 一张自增表里面总共有 7 条数据,删除了最后 2 条数据,重启 MySQL 数据库,又插入了一条数据,此时 id 是几?164. kafka 同时设置了 7天和 10G 清除数据,到第五天的时候消息达到了 10G,这个时候 kafka 将如何处理?session与cookie的区别是什么?

BASK2311的博客 1172

紫光PG2L100H平台DDR3 IP核调试实战:从AXI接口到状态机设计的避坑指南

本文详细介绍了在紫光PG2L100H FPGA平台上调试DDR3 IP核的实战经验,重点解析了AXI接口的特殊行为和状态机设计的关键技巧。通过具体代码示例和调试方法,帮助开发者规避常见陷阱,实现高性能DDR3控制器设计,达到1.2GB/s的稳定带宽。

weixin_28717969的博客 218

C# 与欧姆龙 PLC 实战:通过 Ethernet/IP 协议进行设备控制与监控

本文介绍了如何通过C#和Ethernet/IP协议实现与欧姆龙PLC的通信。Ethernet/IP是基于以太网的工业协议,适用于工业设备间的实时数据交换。文章详细讲解了使用EthernetIPSharp库建立连接、读写数据的步骤,并提供了示例代码。此外,还探讨了实时监控、报警系统等高级功能,为工业自动化控制系统开发提供了实用指导。该方法简化了PLC通信开发,提高了系统可靠性和智能化程度。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 811

事务 失效的八种情况

为了保证事务的正确执行,应该在整个业务逻辑的最外层进行事务的开始和结束操作,并正确处理异常、设置正确的隔离级别,同时注意数据库连接的正确性和并发操作的冲突。3. 事务的传播行为:如果新线程的异步操作在事务方法内部,且事务传播行为为REQUIRED_NEW(新建事务),则新线程将会开启一个新的事务,与原事务无关,导致事务失效。2. 事务隔离级别不正确:事务的隔离级别决定了事务对并发操作的影响程度,如果在类内部进行了对事务隔离级别的设置,可能会导致事务的隔离级别不正确,从而导致事务失效。

jyx_boy的博客 6175

DRV8311HRRWR直流无刷(BLDC)电机驱动原理图设计

DRV8311HRRWR集成三个MOSFET 半H桥,用于驱动三相无刷直流电机(BLDC),适用于5V、9V、12V或18V直流电源轨或1S至4S电池供电应用。内部集成三个具有集成电流感测功能的电流感测放大器(CSA),可感测BLDC电机的三相电流,从而实现FOC和电流控制系统设计方案。集成保护特性:VM 欠压锁定 (UVLO)、 电荷泵欠压 (CPUV)、过流保护 (OCP)、热警告和热关断 (OTW/OTSD)、故障条件指示引脚 (nFAULT)支持 1.8V、3.3V 和 5V 逻辑输入。

zhusl6688的博客 1228

Spring事务失效场景

通过以上排查和优化,可有效解决 Spring 事务失效问题,确保数据操作的一致性和完整性。会创建新事务,挂起外层事务。若内层事务成功提交,即使外层事务回滚,内层操作也不会回滚。手动获取的数据库连接未参与 Spring 事务管理,操作独立于事务之外。在 Spring 应用中,事务失效是一个常见但容易被忽视的问题。多数据源场景下,未显式指定事务管理器,导致部分操作不在事务内。强制方法在非事务环境执行,若外层存在事务,会被挂起。管理 JPA 事务,导致事务不生效。,Spring 不会创建事务代理。

2301_76740633的博客 1221

ruoyi-nbcio-plus基于vue3的flowable服务任务的升级修改

ruoyi-nbcio-plus基于vue3的flowable服务任务的升级修改

宁波阿成的博客 846

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Spring事务失效的场景有哪些

如果在使用@Transactional注解声明事务时,有时想自定义回滚异常,spring也是支持的。可以通过设置rollbackFor参数,来完成这个功能。如下:@Service但是如果在程序执行过程中,出现了sql异常,但是sql异常并不属于我们定义的BusinessException异常,所以事务也不会回滚延伸:1 嵌套事务导致多回滚了怎么办?@Service@Autowired@Service如果说对于这样的代码。

刘皇叔说Java的博客 2347

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

spring事务失效的几种场景以及原因

前言 spring事务失效场景可能大家在很多文章都看过了,所以今天就水一篇,看大家能不能收获一些不一样的东西。直接进入主题 spring事务失效场景以及原因 1、场景一:service没有托管给spring public class TranInvalidCaseWithoutInjectSpring { private UserService userService; public TranInvalidCaseWithoutInjectSpring(UserService userS

kingwinstar的博客 4168

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【Java面试篇】Spring中@Transactional注解事务失效的常见场景

记录一下使用@Transational注解实现事务,常见的几种失效场景

热爱编程、热爱生活、热爱探索 1万+

spring事务失效的各种场景(13种)

在使用@Transactional注解声明事务时,有时我们想自定义回滚的异常,spring也是支持的。可以通过设置rollbackFor参数,来完成这个功能。但如果这个参数的值设置错了,就会引出一些问题1234class)publicvoidthrowsException{save(demo);}上面是我们自定义的业务异常,如果在执行上面这段代码,保存和更新数据时,程序报错了,抛了SqlException、DuplicateKeyException等异常。

glenshappy的专栏 3565

spring事务失效的12种场景

在使用@Transactional注解声明事务时,有时我们想自定义回滚的异常,spring也是支持的。可以通过设置参数,来完成这个功能。@Slf4j@Service如果在执行上面这段代码,保存和更新数据时,程序报错了,抛了SqlException、DuplicateKeyException等异常。而BusinessException是我们自定义的异常,报错的异常不属于BusinessException,所以事务也不会回滚。

李东阳的博客 1333

Spring事务失效常见场景

Spring的事务代理通常是通过动态代理实现的,一些常见的事务失效场景。

weixin_44929475的博客 1635

Spring事务失效的12种场景

Spring事务失效的原因多种多样,常见的问题包括方法可见性、异常处理、传播行为配置、代理机制等。理解这些场景并采取相应的解决方案,可以有效避免事务失效问题。在实际开发中,建议仔细检查事务配置,确保事务逻辑正确执行。

z17826856787的博客 1102

Spring - 事务失效的场景

文章目录1. 数据库事务1.1 事务的ACID特性1.2 多事务的并发进行造成的问题1.3 MySQL事务的隔离级别1.4 Spring事务的传播特性1.5 Spring事务的失效场景1.5.1 本类中没有事务的方法调用含有事务的方法1.5.2 rollbackFor属性使用错误1.5.3 出现异常后被捕获处理了 1. 数据库事务 1.1 事务的ACID特性 事务的概念:事务是由N步数据库的操作序列组成的逻辑单元,这系列操作要么全部执行,要么全部放弃; ① 原子性:事务开始执行,要么全部执行成功,要么全部执

你今天真好看呀 3299

spring事务失效的场景

spring事务失效的场景

qw2869534823的博客 1278

spring中事务失效场景

spring中事务失效场景

拒绝熬夜啊的博客 1272
上一篇: SpringCloudGateway网关限流并返回自定义异常信息
下一篇: SQL语句查询取得表结构
我就是我500
博客等级 码龄8年 8粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值