项目场景:
当部门解散了不仅需要把部门信息删除了,还需要把该部门下的员工数据也删除了
原因分析:
以下程序出现的问题:即使程序运行抛出了异常,部门依然删除了,但是部门下的员工却没有删除,造成了数据的不一致。
原因:
-
先执行根据id删除部门的操作,这步执行完毕,数据库表 dept 中的数据就已经删除了。
-
执行 1/0 操作,抛出异常
-
抛出异常之前,下面所有的代码都不会执行了,根据部门ID删除该部门下的员工,这个操作也不会执行 。
此时就出现问题了,部门删除了,部门下的员工还在,业务操作前后数据不一致。
而要想保证操作前后,数据的一致性,就需要让解散部门中涉及到的两个业务操作,要么全部成功,要么全部失败 。 那我们如何,让这两个操作要么全部成功,要么全部失败呢 ?
那就可以通过事务来实现,因为一个事务中的多个业务操作,要么全部成功,要么全部失败。
解决方案:
接下来,我们就可以在业务方法delete上加上 @Transactional 来控制事务
还可以开启事务的日志
#spring事务管理日志
logging:
level:
org.springframework.jdbc.support.JdbcTransactionManager: debug