记录一下在用Springboot+mysql中使用@Transactional注解时遇到的问题解决方法:
1.启动类Application添加注解@EnableTransactionManagement增加事务支持;
2.service类方法上加@Transactional注解,只会在遇到RuntimeException的时候才会回滚,加上rollbackFor=Exception.class,可以让事务在遇到非运行时异常时也回滚。
Exception分类:
(1)RuntimeException:运行时异常,也叫未受检异常。比如:NullPointerException/ArithmeticException/ClassCastException/ArrayIndexOutOfBoundsException/StringIndexOutOfBoundsException
(2)编译期异常:就是客观上可以通过java编译期可以检测出的并且需要coder处理的异常,否则程序就会发生错误,无法通过编译,比如:IOException/FileNotFoundException/ClassNotFoundException
/SQLException/NoSuchFieldException/NoSuchMethodException
3.mysql数据库的存储引擎必须是innoDB,其他类型不支持事务。
show engines:查看数据库支持的存储引擎类型
show variables like ‘%storage_engine%’:查看使用的存储引擎类型
show create table 表名:查看表使用的存储引擎类型
alter table 表名 ENGINE = InnoDB:修改表对应的存储引擎类型
4.service类的方法要添加throw Exception将异常抛出,不要将异常catch,放至controller层捕获。否则事务不会回滚。
@Transactional注解在Springboot+mysql中使用的注意事项
最新推荐文章于 2024-06-21 16:01:11 发布