spring事务的四大特性、事务的传播特性
原子性:
概念型理解:事务是不可分割的一部分,要么同时执行成功,要么集体回滚,比如一个方法中管理了多个方法,如果其中有一个执行失败,集体回滚。
业务型理解:我有一百块钱,给你转五十,转账过程中出现问题,不会扣除我的钱,你的钱也不会增加。
一致性:
概念型理解:是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
业务型理解:我有一百块钱,给你转五十,我还剩五十,咱们两个相加还是一百。
隔离性:
概念型理解:事务之间是相互隔离,互相不受打扰。
业务型理解:我给你转账的过程中,是不允许立马执行查询的,必须等待转账成功后,再执行查询的操作。
排它锁、行级锁、表级锁
持久性:
概念型理解:事务一旦提交,不再执行修改事务的情况下,它就是永久性的保存的。
业务型理解:服务器宕机了,电脑坏掉了,数据还有吗?一定是有的,因为它持久化了。
1、Propagation.REQUIRED
方法被调用时自动开启事务,在事务范围内使用则使用同一个事务,否则开启新事务。
2、Propagation.REQUIRES_NEW
无论何时自身都会开启事务
3、Propagation.SUPPORTS
自身不会开启事务,在事务范围内则使用相同事务,否则不使用事务
4、Propagation.NOT_SUPPORTED
自身不会开启事务,在事务范围内使用挂起事务,运行完毕恢复事务
5、Propagation.MANDATORY
自身不开启事务,必须在事务环境使用否则报错
6、Propagation.NEVER
自身不会开启事务,在事务范围使用抛出异常
7、Propagation.NESTED
如果一个活动的事务存在,则运行在一个嵌套的事务中. 如果没有活动事务, 则按TransactionDefinition.PROPAGATION_REQUIRED 属性执行。需要JDBC3.0以上支持。