关于@Transactional(readonly = false)注解不起作用的可能性
readOnly=true表明所注解的方法或类只是读取数据。
readOnly=false表明所注解的方法或类是增加,删除,修改数据。
通常添加事务回滚注解都是在service层中,可以在类上,也可以在方法上:
注意点:
service类标签(一般不建议在接口上)上添加@Transactional,可以将整个类纳入spring事务管理,在每个业务方法执行时都会开启一个事务,不过这些事务采用相同的管理方式。
@Transactional 注解只能应用到 public 可见度的方法上。 如果应用在protected、private或者 package可见度的方法上,也不会报错,不过事务设置不会起作用。
默认情况下,spring会对unchecked异常进行事务回滚;如果是checked异常则不回滚。
辣么什么是checked异常,什么是unchecked异常?
java里面将派生于Error或者RuntimeException(比如空指针,1/0)的异常称为unchecked异常,
其他继承自java.lang.Exception得异常统称为Checked Exception,如IOException、TimeoutException等
代码中事务不回滚常见错误:
有时候我们即使在service层中加了,但是还是没有实现回滚,
注意:如果在service 方法上添加了注解,方法的上一层controller一定要try catch捕获异常,
或者在当前try catch中添加
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
例如:
@Transactional(readOnly = false) public boolean updatesetZszj(Ze54 ze54,Ze54 ze54own) throws Exception {if (dao.updateset(ze54)>0){//设置卷宗号ze54own.setBze543(ze54.getBze543());//请求xml组装String dataXmlString=this.getXmlData(ze54own);//调用大唐组卷接口String resultxml = WebServiceClient.execute(dataXmlString, "archive", "admin");//为空时手动抛出异常,使更新回滚if(resultxml==null){throw new RuntimeException("调用大唐组卷接口异常");}Map<String, Object> map = WebServiceClient.xml2Map(resultxml);Map<String, Object> map2=(Map<String, Object>)map.get("Success");String res= map2.get("Code").toString();if(res.equals("true")){logger.info("组卷成功");return true;}else{logger.error("组卷失败,调用大唐组卷接口失败");return false;}}else{return false;}}
我这里是一个update方法,在update中 同时调用接口,当接口调用失败时,我返回一个null值,然后手动抛出RuntimeException 异常,注意这里一定要是RuntimeException,如果直接是Exception则不回滚,然后在上层的controller调用这个方法时,注意try catch就可以了。
例: 这里是一段更新方法,更新时同时记录日志表,直接在try catch 方法中添加 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
手动回滚,controller层中直接调用就可以。
@Transactional(rollbackFor = Exception.class)public Boolean removeDlrList(@Param("ids") Integer[] ids,@Param("secDepartmentId")Integer secDepartmentId,@Param("logDo")LocLogDo logDo){try {if( userDao.removeDlrList(ids,secDepartmentId)>0) {//操作日志return logDao.insert(logDo)>0;}else{return false;}} catch (Exception e) {TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();log.error("批量移动用户异常",e);return false;}}
关于@Transactional(readonly = false)注解不起作用的可能性相关推荐
- 关于@Transactional(readOnly = false)注解,数据新增修改Connection is read-only
关于@Transactional(readOnly = false)注解,数据新增修改Connection is read-only 有时你新增或修改会报Connection is read-only ...
- Connection is read-only @Transactional(readOnly = false)不管用
今天改代码遇到一个问题,项目是老项目,这个功能又是新加上的.上一个人写业务直接在控制层写的.但是现在到我接手,刚好最近客户在用出现了问题.修改数据的时候数据乱了.以前这个功能是没有事务的,我一看就觉得 ...
- spring 事务管理之只读事务@Transactional(readOnly = true)
我们可以使用 @Transactional(readOnly = true) 来设置只读事务 在将事务设置成只读后,当前只读事务就不能进行写的操作,否则报错.如下 Cause: java.sql.SQ ...
- SpringMVC当中的 @Transactional(readOnly = true) 的作用
2019独角兽企业重金招聘Python工程师标准>>> readOnly=true表明所注解的方法或类只是读取数据. readOnly=false表明所注解的方法或类是增加,删除,修 ...
- 说说@Transactional(readOnly = true),和mysql事务隔离级别;
1.首先说说注解@Transactional(readOnly = true) (1)这里使用readOnly=true后,直观会给我们的体现就是,在该事务中,我们只能做查询,不能做更改等操作,否则报 ...
- 带你理解 只读事务(@Transactional(readOnly = true)
概念:从这一点设置的时间点开始(时间点a)到这个事务结束的过程中,其他事务所提交的数据,该事务将看不见!(查询中不会出现别人在时间点a之后提交的数据) 应用场合: 如果你一次执行单条查询语句,则没有必 ...
- Autowired注解起什么作用呢?
转自: Autowired注解起什么作用呢? 下文笔者将讲述Autowired注解的功能简介说明,如下所示: Autowired注解的功能:用于依赖注入,最常见的是属性注入,构造函数的参数注入 下文笔 ...
- @Transactional(readOnly = true)
概念:从这一点设置的时间点开始(时间点a)到这个事务结束的过程中,其他事务所提交的数据,该事务将看不见!(查询中不会出现别人在时间点a之后提交的数据) 应用场合: 如果你一次执行单条查询语句,则没 ...
- spring事务@Transactional(readOnly = true)及隔离级别实验
先写结论: 第一:@Transactional(readOnly = true) 1.那么方法里面,必须是读的操作,当有写的操作的时候会报错提示. 2.读到的数据,从进入方法开始,以后即使其他客户端修 ...
最新文章
- 简介nandflash、norflash、ram、sram、dram、rom、eeprom、flash的区别
- [导入]深入了解OpenOffice.org(二){作者:路广}
- Apache HBase的现状和发展
- 解决不同浏览器的css兼容问题
- php curl 不验证ssl,PHP Curl https跳过ssl证书认证报错记录及解决
- leetcode1111. 有效括号的嵌套深度(栈)
- Python入门基础--雨敲窗视频系列
- 第46屆ICPC 東亞洲區域賽(澳門)(正式賽)Link-Cut Tree
- php代码编写直接插入排序算法,PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析...
- springBoot集成多数据源mybatisPlus(自动切换数据源)
- python软件下载对电脑配置要求-python3批量统计用户电脑配置
- docfx daylybuild
- 牛客网——程序员代码面试指南(更新ing)
- sendkeys安装包_利用Windows命令行解压zip压缩文件(不借助第三方软件)
- 伍德里奇计量经济学第五版第四章计算机操作,伍德里奇计量经济学第四章
- EI/scopus推荐-智能交通与智慧城市会议
- 用计算机画统计图,统计图
- JavaScript:实现multiplesThreeAndFive三或五倍数的算法 (附完整源码)
- 电商交易规律、RFM分类
- 大学计算机基础教育改革,谈计算机等级考试引导大学计算机基础教育改革.pdf...
热门文章
- nfs挂载报错mount.nfs: Stale file handle解决(失效文件句柄)
- 如何利用showdoc自动生成API文档
- ie历史记录值不能触发onchange事件
- CAS操作是怎么实现的
- Docker集群管理(DockerHub Harbor 打包-Jib 任务编排工具- docker-compose和Swarm)
- 转载:uIP之ARP:地址解析协议
- .bat和.sh命令一条命令分行写
- 一天一个产品分析之印象笔记_米米米米粒口红_新浪博客
- MySQL同一个表中批量刷数据
- 怎样用命令行方式添加打印机端口? (已解决)