一:学习事务是什么,他的作用是什么
1.事务是一组操作的集合,它是一个不可分割的工作单位。他的作用就是使这组操作要么同时成功,要么同时失败。(举例:但某公司的一个部门,该部门下是不是有很多员工,如果我解散该部门是不是该部门下的员工是不是也得解散,这就使得他们是一个单位。)
二.@Transactional注解当中的两个常见的属性
1.异常回滚的属性:rollbackFor
第一种当出现运行时异常,我删除部门信息的时候可以发现,数据部门数据还是存在的。这个时候是因为运行到int i = 1/0进行了异常处理。此时员工数据不会删除,所以将删除部门的信息进行了回滚。
第二种编译时的异常,我们的事务是怎么处理的。
我们可以看到部门已经删除了,但员工还是保留着。
总结:我们可以得出结论事务会回滚运行时异常,不会回滚编译时异常。
2.事务传播行为:propagation
事物传播行为就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。
例如:两个事务方法,一个A方法,一个B方法。在这两个方法上都添加了@Transactional注解,就代表这两个方法都具有事务,而在A方法当中又去调用了B方法。
我们默认的是REQUIRED,下面的表格是有哪些传播行为
对于这些事务传播行为,我们只需要关注以下两个就可以了:
-
REQUIRED(默认值)
-
REQUIRES_NEW
接下来我们写一个案例,关于REQUIRES_NEW,写一个日志记录表来记录删除部门的信息
1.自己要建一张部门信息表来记录相关数据,在service层加入事务,
2.让部门业务去调用部门信息业务,着相当于,事务A调用事务B,传播行为是requires_new
结论就是这个部门信息表一定会有数据