出自:https://www.jianshu.com/p/25c8e5a35ece
含有事务的方法的嵌套调用怎么处理?这是事务的传播机制处理的问题。
spring默认为required,特定是:
1、如果当前(正在被调用的)方法有事务,则该方法使用该事务,不管嵌套的service层方法是否有事务(嵌套的方法发生的运行时异常,也属于当前方法的一部分,所以当前方法的sql全部回滚)。
2、当前方法没有事务,则该方法就没有事务,不会被嵌套的方法影响。嵌套的service层方法如果有事务,就使用其事务。当前方法有无运行时异常,不会影响它。
知识点:
1、事务遇到运行时异常才会回滚,检查时异常(代码编译器提示的必须try catch的异常)不会回滚。
2、mysql数据库MyISAM存储引擎不支持事务,innodb支持。
3、springboot添加事物,只需要在具体方法上添加注解@Transactional就行
或者添加到类上,表示该类下所有方法都添加了事务。
4、mybatis框架,封装了jdbc部分代码,比如连接数据库等,使开发人员只用专注于sql语句的编写,节省了人力
网友评论