Spring自动事物管理失效情形

2023-11-08

声明式事物管理虽然十分方便,但是也有失效的情形:

1.@Transactional作用在非public方法上

Spring的事物管理只支持使用public声明的方法,即使是在同一个包或者同一个类中的方法事务管理也会失效

package com.ffyc.springdemo.service;
 ​
 import com.ffyc.springdemo.dao.AdminDao;
 import com.ffyc.springdemo.model.Admin;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 ​
 @Service
 ​
 public class AdminService {
 ​
     @Autowired
     AdminDao adminDao;
     @Transactional(rollbackFor = Exception.class)
      void zhuanZhang(){   //@Transactional作用在非public方法上
         adminDao.sub();
         System.out.println(10/0);
         adminDao.add();
     }adminDao.update();
     }
     
 }
 ​

2.所处方法中的异常被try catch捕获处理

若是作用方法中含有try catch语句并且捕获处理了方法中的异常,这样Spring就会无法找到异常从而导致事务管理失效

 package com.ffyc.springdemo.service;
 ​
 import com.ffyc.springdemo.dao.AdminDao;
 import com.ffyc.springdemo.model.Admin;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 ​
 import java.io.UnsupportedEncodingException;
 ​
 @Service
 @Transactional(rollbackFor = Exception.class)
 public class AdminService {
 ​
     @Autowired
     AdminDao adminDao;
     public void zhuanZhang(){
         adminDao.sub();
         try {   //使用try catch捕获异常代码
             "abc".getBytes("utf-99");
         } catch (UnsupportedEncodingException e) {
             e.printStackTrace();
         }
         adminDao.add();
     }
 }
 ​

3.出现编译期异常

Spring事物管理默认只识别运行期异常,对于编译期异常Spring默认不处理,因此导致Spring事物管理失效

 package com.ffyc.springdemo.service;
 ​
 import com.ffyc.springdemo.dao.AdminDao;
 import com.ffyc.springdemo.model.Admin;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 ​
 import java.io.UnsupportedEncodingException;
 ​
 @Service
 @Transactional(rollbackFor = Exception.class)
 public class AdminService {
 ​
     @Autowired
     AdminDao adminDao;
     
     public void zhuanZhang() throws UnsupportedEncodingException {
         adminDao.sub();
         "abc".getBytes("utf-99");
         adminDao.add();
     }  
 }
 ​

我们可以手动设置使Spring事务管理识别所有异常:

 @Transactional(rollbackFor = Exception.class)

我们通过设置rollback为Exception.class可以设置让Spring识别所有的异常,从而可以将任何异常都列入事务管理.

4.@Transactional事务传播行为设置错误

事务传播行为我们在下篇博客详细介绍

5.数据库引擎不支持事务管理

在MySQL中只有InnoDB引擎支持事物管理,其他的引擎均不支持事物管理,因此我们要想使用Spring的事物管理操作数据库,在MySQL中就必须保证此数据库的引擎为InnoDB引擎

 

6.同一个类中,使用非代理对象调用一个有事务管理的方法

在Spring事务管理中,我们必须使用代理对象调用另一个代理对象,否则Spring无法帮我们找到所需管理的事务

 package com.ffyc.springdemo.service;
 ​
 import com.ffyc.springdemo.dao.AdminDao;
 import com.ffyc.springdemo.model.Admin;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 ​
 @Service
 ​
 public class AdminService {
 ​
     @Autowired
     AdminDao adminDao;
 ​
     public void zz(){
         this.zhuanZhang(); //使用非代理对象调用一个有事务的方法
     }
     @Transactional(rollbackFor = Exception.class)
     public void zhuanZhang(){
         adminDao.sub();
         System.out.println(10/0);
         adminDao.add();
     }
 }
 ​

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring自动事物管理失效情形 的相关文章

随机推荐

  • Rust学习:5_所有权与借用

    Rust学习 5 所有权与借用 前言 为了学习Rust 阅读了github上的Rust By Practice电子书 本文章只是用来记录自己的学习过程 感兴趣的可以阅读原书 希望大家都能掌握Rust 所有权与借用 Rust 之所以能成为万众
  • IDLE练习

    目录 一 IDLE介绍 二 IDLE实操 三 IDLE常用快捷键 四 第一个python程序 五 程序基本格式 一 IDLE介绍 1 IDLE 是 Python 的官方标准开发环境 Python 安装完后同时就安装了 IDLE 2 IDLE
  • 【100天精通Python】Day49:Python Web编程_Web框架,Flask框架从安装到使用

    目录 1 Web 框架 2 python 中常用的web框架 3 Flask 框架的使用 3 1 Flask框架安装 3 2 第一个Flask程序 3 3 路由 3 3 1 基本路由 3 3 2 动态路由 3 3 3 HTTP 方法 3 3
  • android强制横屏软件!我了解到的面试的一些小内幕!这原因我服了

    前言 说起程序员人们的第一印象就是工资高 加班凶 话少钱多头发少 再加上现在科技互联网公司太吃香 bat 华为小米等公司程序员加班情况被广泛传播 程序员用生命在敲代码的印象刻在了很多人的心里 与其它行业一样 凡是有高级和普通 虽然都是敲代码
  • 【100%通过率 】【华为OD机试 c++/python】分奖金【2023 Q1

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 公司老板做了一笔大生意 想要给每位员工分配一些奖金 想通过游戏的方式来决定每个人分多少钱 按照员工的工号顺序 每个人随机抽取一个数字 按照工号的
  • Undo框架(三)

    21 5 使用外部对象管理Undo状态 在前面的示例中 我们自定义的UndoableEdit实现要负责维护可撤销对象的之前与之后状态 Swing Undo框架同时支持使用可撤销编辑实现之外的对象来管理状态的能力 当使用一个外部对象用于状态管
  • 2019第十届蓝桥杯B组省赛E题迷宫(bfs)

    试题 E 迷宫 本题总分 15 分 问题描述 下图给出了一个迷宫的平面图 其中标记为 1 的为障碍 标记为 0 的为可 以通行的地方 010000 000100 001001 110000 迷宫的入口为左上角 出口为右下角 在迷宫中 只能从
  • (2023)最新VSCode安装包(.zip版本),解压缩直接用

    1 官网地址 Download Visual Studio Code Mac Linux Windows 2 下载 zip文件 给了网盘链接 自行下载 链接 https pan baidu com s 1wl uaAw3VsbaeCIehT
  • 笔记:Linux中的管道符和重定向

    只是为了一边学习一边做笔记 欢迎交流 一 管道符 管道符就是那个竖杠 它的核心作用就是把前面命令的输出当作后边命令的输入 直接举例说明 ls etc grep v 将ls命令的输出 当作grep命令的输入 注意 管道符可以连续使用多个 二
  • MySQL----MySQL将数据从一个数据导入到另一个数据库

    原文链接 1 从源数据库到处数据 mysqldump u 用户名 p 数据库名 gt 文件名 sql 如 mysqldump u root p test gt test sql 2 将test sql文件复制到另一个数据库所在的服务器上 比
  • 【QT】【ChatGPT】具有一点点深度的问题

    QT ChatGPT 具有一点点深度的问题 程序说明 一 博客日期 二 引言 版权声明 先上简单菜 稍微复杂点 一 有哪些类是隐式的引用计数 二 请你谈一下你对C 智能指针的理解和使用方式 三 请你简述一下C 中的虚函数 四 请你谈一下对C
  • 第18课 微信小程序app.js全局属性与公共方法的使用

    第18课 微信小程序app js全局属性与公共方法的使用 通过小程序的背景api播放器案例演示 由于背景音乐播放器全局只能有一个 所以只能在全局设置这一个并调用一个 1 app js内获取背景音乐api并设置成属性 2 在utils内设置公
  • 关于Jquery的Validate插件--rules添加自定义方法(强密码验证方法)

    简介 请看菜鸟教程 根据给出的方法 自定义识别密码是否为复杂密码的方法 链接 https www runoob com jquery jquery plugin validate html Query Validate 插件为表单提供了强大
  • ERROR: No matching distribution found for Django 报错解决

    ERROR No matching distribution found for Django 报错解决 今天安装一个 python 依赖时 执行 pip install r requirements txt后 界面出现ERROR No m
  • getAction()

    event getAction 获得的返回值 触摸屏幕时刻 case MotionEvent ACTION DOWN 0 break 触摸并移动时刻 case MotionEvent ACTION MOVE 2 break 终止触摸时刻 c
  • 向Intel迁移!(上)

    转自 http www programmer com cn 14703 文 王越 2005年 苹果宣布其芯片向Intel迁移 在这背后夹杂着错综复杂的缘由 从Intel的诞生 精简指令集与复杂指令集之争到AIM与Wintel两大联盟之争 几
  • 计算机系统的组成说课,计算机系统的组成说课稿

    计算机系统的组成说课稿 一 教学内容分析 1 教学内容分析 本节是广东教育出版社出版的 信息技术 初中第一册第一章 信息处理与计算机 第二节的内容 授课为1课时 这是小学升初一新生接触信息技术这门课的第二堂课 这节课能否讲得生动易懂 涉及能
  • 函数式语言Haskell

    函数式语言Haskell 为了方便 建设在windows下安装编译器和解析器 今有2个 Hugs 和 GHC 网址如下 http cvs haskell org Hugs pages downloading htm http www has
  • 密码学之公钥密码体系(2):RSA算法

    密码学之公钥密码体系 2 RSA算法 文章目录 一 RSA算法背景 二 RSA算法描述 三 RSA的硬件实现 四 RSA的安全性 五 对RSA的选择密文攻击 一 RSA算法背景 上一讲介绍了公钥密码体系中的背包算法 在Merkle背包算法出
  • Spring自动事物管理失效情形

    声明式事物管理虽然十分方便 但是也有失效的情形 1 Transactional作用在非public方法上 Spring的事物管理只支持使用public声明的方法 即使是在同一个包或者同一个类中的方法事务管理也会失效 package com