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自动事物管理失效情形 的相关文章

  • Spring:url 无法正确解析链接

    尽管我对 Java 有丰富的经验 但我对 Spring 框架和 Web 应用程序还很陌生 当我在本地 tomcat 服务器上运行我的网站时 URL 为 http localhost 8080 myApp 现在 请求映射将我委托到我的主页 R
  • 导入的项目抛出 java.lang.ClassNotFoundException

    所以我将一个现有的项目导入到 eclipse 中 但让它工作时遇到了很多麻烦 该项目与其他三个图书馆项目一起提供 谷歌播放服务库 捕获活动 肖像二维码 As soon as I imported the project I went und
  • 同步 Set 线程的构造函数副本安全吗?

    获取同步版本的最简单方法java util Set将使用Collections synchronizedSet 像这样 Set mySyncSet Collections synchronizedSet new HashSet The Ja
  • 什么时候数据库被称为嵌入式数据库?

    术语 嵌入式数据库 与 数据库 具有不同的含义吗 我见过的嵌入式数据库有两种定义 嵌入式数据库就像专门为 嵌入式 空间 移动设备等 设计的数据库系统一样 这意味着它们在紧张的环境中 内存 CPU 方面 可以合理地执行 嵌入式数据库就像不需要
  • java中使用多个分隔符分割字符串

    我正在研究一种数据挖掘算法 我需要使用多个单词来标记字符串 我有一个单独的文件 其中包含所有停用词 我需要做的是通过任何作为分隔符的单词 停用词 来标记输入字符串 例如 如果文件包含停用词 a is and of that 输入字符串变为
  • 动态添加的 RemoteView 上的布局权重

    在我的小部件中 我使用以下内容将项目 R layout widget item 动态添加到我的主小部件布局中定义的 LinearLayout 中 Main widget layout RemoteViews views new Remote
  • 如何从号码选择器中跳过某些号码?

    选号器 np NumberPicker findViewById R id numberPicker1 np setMaxValue 200 np setMinValue 1 Button b Button findViewById R i
  • 在 Volley 中更新 UI 最有效的方法是什么

    最近我在 android 中使用 Volley 库 它工作得很好 但我想知道更新 UI 的最有效方法 我有一个包含所有 Volley 方法的 Utils 类 现在我传递了所有视图将作为参数更新 但我读到我可以在活动中实现侦听器 然后将它们作
  • 如何统计List中某个元素出现的次数

    我有一个ArrayList Java的Collection类 如下 ArrayList
  • hibernate 如何确保二级缓存使用数据库中的最新数据进行更新

    我读到 使用 hibernate 的二级缓存 它可以通过减少数据 对象检索的数据库命中来提高应用程序性能 但是hibernate是如何保证二级缓存与数据库中的数据是最新的呢 例如 假设下面的类是实体并持久化到数据库中 Entity clas
  • JUnit 集成测试的“IT.java”文件名后缀(而不是“Test.java”)是否是一种约定? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我习惯于用一个名称来命名我的 JUnit 集成测试 Test java最后例如DatabaseConnectionTest java并将它们放在
  • 使用 Spring Java 配置自动装配 bean

    是否可以使用Spring的 Autowired用 Java 编写的 Spring 配置中的注释 例如 Configuration public class SpringConfiguration Autowired DataSource d
  • 本机查询 (JPA) 未重置并返回相同的旧结果

    我有一个本机 sql 查询如下 for init i 0 i lt 2 i String sql Select from accounts where id Query query em createNativeQuery sql Acco
  • Java中对象类的继承

    当我读java书时 我遇到了 每个类都扩展类 Object 但是如果想要 B 类扩展 A 类 但是 B 类现在将具有多重继承 一个来自 Object 类 一个来自 A 类 如何解决冲突 谁能解释一下吗 它是多级继承 而不是多重 class
  • Java 8 Streams - 嵌套映射到列表

    firstlist stream map x gt return secondList stream map y gt return a string collect Collectors toList Output I need Get
  • 使用可变参数绘制星形

    我的任务是编写程序 允许用户绘制星星 星星的大小和手臂数量可能不同 当我处理基本星时 我使用 GeneralPath 和点表进行处理 int xPoints 55 67 109 73 83 55 27 37 1 43 int yPoints
  • 手写签名对比

    有谁知道java中一种将手写文本样本 例如签名 亲笔签名等 与一个或多个样本进行比较的方法 最好是开源的 你可以看看这个OCR小程序 http www heatonresearch com articles 42 page1 html
  • 正确检查 FTP 服务器连接

    我在程序开始时打开与 FTP 服务器的连接 在对服务器执行操作之前 我想检查连接是否已成功建立 最简单快速的方式 因此如果连接消失 我将尝试再次连接 我用这段代码来做到这一点 private boolean checkConnection
  • web.xml 过滤器如何工作?您可以将两个过滤器映射到所有页面 (/*) 并指定顺序吗?

    我想使用 Spring Security 它说将过滤器映射到 但我已经有一个映射到 的过滤器 即 Tuckee URLRewrite 过滤器 是否可以将两个过滤器映射到同一事物 并且有没有办法指定过滤器的调用顺序 是的你可以 servlet
  • 如何设置Spring Security SecurityContextHolder策略?

    我在我的服务中使用异步方法 Spring 3 Async注解 我遇到了一个问题 生成的线程没有安全上下文 原因是 Spring Security 默认使用SecurityContextHolder MODE THREADLOCAL其上下文持

随机推荐

  • 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