以下场景是基于mysql数据库,InnoDB的存储引擎。

一.没有添加@Transactional注解

二.方法声明是private或者static

三.没有抛出异常而是try catch了异常

下面这种情况,事务不会回滚

@Transactional
public void insertUser(String name){
try {
User user = new User();
user.setName(name);
userDao.insertUser(user);
//模拟抛异常
throw new RuntimeException();
} catch (RuntimeException e) {
e.printStackTrace();
}
}

四.异常类型不对

默认只对runtimeException的类型进行回滚,如果抛出Exception异常是不进行回滚的,如果想回滚要配置@Transactional(rollbackFor = Exception.class)

@Transactional
public void insertUser(String name) throws Exception { User user = new User();
user.setName(name);
userDao.insertUser(user);
//模拟抛异常
throw new Exception();
}

五.自己调自己

下面这种情况,事务是不生效的,如果要生效,可以把this调用放到另外一个类,insertStu这个放另外一个类,这样可以这个方法有事务

public void insertUser(String name) {
User user = new User();
user.setName(name);
//没有事务,不会回滚,保存成功
userDao.insertUser(user);
insertStu(name);
} @Transactional
public void insertStu(String name){
Stu stu = new Stu();
stu.setName(name);
//没有事务,保存会成功
stuDao.insertUser(stu);
throw new RuntimeException();
}

下面这种情况,事务是生效的,注意

@Transactional
public void insertUser(String name) {
User user = new User();
user.setName(name);
//有事务,会回滚,保存不成功
userDao.insertUser(user);
insertStu(name);
} public void insertStu(String name){
Stu stu = new Stu();
stu.setName(name);
//有事务,会回滚,保存不成功
stuDao.insertUser(stu);
throw new RuntimeException();
}

六.没有配置正确的事务管理器

如果项目中是多数据源情况,要单独配置事务管理器。当引入jdbc依赖之后,Spring Boot会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager,

所以我们不需要任何额外配置就可以用@Transactional注解进行事务的使用。

最新文章

  1. Unix及类Unix系统文本编辑器的介绍
  2. ios几个重要方法
  3. HDU 2545 树上战争 (并查集+YY)
  4. LigerUi框架+jquery+ajax无刷新留言板系统的实现
  5. Java性能优化权威指南-读书笔记(五)-JVM性能调优-吞吐量
  6. Mongoose 是什么?
  7. UITapGestureRecognizer 的用法
  8. day-7
  9. c++11 auto
  10. cocos2dx定时器
  11. linux 配置 mail server
  12. java字符编码,字符转码
  13. day01_HTML
  14. git常用命令,学git代码管理
  15. webuploader 上传文件 生成链接下载文件
  16. CPM、CPC、CPA、CPS、CPL、CPR 是什么意思 -解析互联网广告术语
  17. 《BUG创造队》第二次团队作业:团队项目选题报告
  18. 盘点海口最好吃的西餐厅top10
  19. 转:日志插件 log4net 的使用
  20. [No0000F9]C# 运算符重载

热门文章

  1. Django中的常用字段类型与参数
  2. CF116B Little Pigs and Wolves 题解
  3. CF1481B New Colony 题解
  4. CF1154A Restoring Three Numbers 题解
  5. JAVA运行报错 [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
  6. c++之记一次常见数据类型在fedora和wind10下所占的长度
  7. 如何让 Spring Security 「少管闲事」
  8. Java练习小题_猴子吃桃问题分别用for循环和while循环实现程序。
  9. 【MySQL作业】avg 和 count 函数——美和易思聚合函数应用习题
  10. 智慧巨鹿使用Rainbond落地实践,一个平台管理所有应用系统