一、Spring事务流传属性(propagation)
1、propagration(事务流传属性)产生场景:
Service能够调用一个或者多个Dao办法,然而在应用Spring之前咱们只能调用dao层,然而不能调用另外一个Service层中的办法
案例:在UserService.java中有办法 save().其中嵌套AddressService.java中update()。当UserService事务产生rollback时, AddressService事务也能够rollback或是commit。

public class UserService {

public void save() {        UserService.update();//AddressService对象uodate操作}

}

2、七个事务流传属性
REQUIRED: 须要事务,内部存在事务融入以后事务,内部没有事务,开启新的事务 【增删改操作罕用】

SUPPORTS: 反对事务,内部存在事务融入以后事务,内部没有事务,不开启新的事 【查问操作罕用 】

REQUIRES_NEW: 每次开启新的事务,如果内部存在事务内部事务挂起(暂停),开启新的事务运行,运行完结后复原内部事务 【日志,流水操作】

案例剖析:转账业务操作:转账,Account,App都是业务层

NOT_SUPPORTED: 不反对事务,如果内部存在事务内部事务挂起,已非事务形式运行.

NEVER: 不反对事务,存在事务报错

MANDATORY: 强制事务没有事务报错

NESTED: 嵌套事务,数据库不反对

二、隔离级别isolation
isolation:[aslen]
:隔离

1、事务个性(事务的基本要素)
java培训中的事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不胜利,要么都胜利。其必须遵循四个准则(ACID )。

ACID指:原子性,一致性,隔离性 ,持久性
(1)原子性(Atomicity [atmsti]):
定义:指一个事务要么全副执行,要么不执行 ,也就是说一个事务不可能只执行了一半就进行了.
如:你从取款机取钱,这个事务能够分成两个步骤: 1划卡,2出钱.不可能划了卡,而钱却没进去.这两步必须同时实现.要么就不实现。

(2)一致性(Consistency[knsstnsi]):
定义:在事务执行前数据库的数据处于正确的状态,而事务执行实现后数据库的数据还是应该处于正确的状态,即数据完整性束缚没有被毁坏;
如:银行转帐,A转帐给B,必须保障A的钱肯定转给B,肯定不会呈现A的钱转了但B没收到,否则数据库的数据就处于不统一(不正确)的状态。

(3)隔离性(Isolation [aslen]
定义:并发事务执行之间互不影响,在一个事务外部的操作对其余事务是不产生影响,这须要事务隔离级别来指定隔离性;
(4)持久性(Durability[drblti]
定义:事务一旦执行胜利,它对数据库的数据的扭转必须是永恒的,不会因比方遇到系统故障或断电造成数据不统一或失落。

2、隔离性(事务的隔离级别)
isolation :隔离级别 多个客户端间操作的隔离性【Client——>Service】

(1)DEFAULT: 采纳数据库默认隔离级别(Spring提供的)
Spring框架提供的隔离级别,以后应用的数据库对应的默认隔离级别
(2)READ_UNCOMMITTED: 读未提交
解析:不同客户端之间能够在一次事务中读取到其余客户端没有提交的事务

(3)READ_COMMITTED: 读提交 用来防止脏读景象呈现的
read_ommited:oracle默认隔离级别
解析:不同客户端之间能够在一次事务中读取到其余客户端曾经提交的事务
(4)REPEATABLE_READ: 可反复读次要是用来防止不可反复读景象呈现的
单词:repeatable:[rpi:tbl] 可反复的
repeatable_read:mysql默认隔离级别
解析:在一次事务中一方更新,导致两次查问后果不统一这种状况叫不可反复读

(5)SERIALIZABLE : 序列化读 用来防止幻影读景象呈现
幻影读概念:在一次事务中一方插入,导致两次查问后果不统一这种状况叫幻影读

解析:一个客户端在一次事务中屡次读取一张表的数据 后果统一

隔离级别 隔离级别值 脏读 不可反复读 幻读
未提交读(Read-Uncommitted) 0 是 是 是
提交读(不可反复读 )(Read-committed) 1 否 是 是
可反复读(repeatable-read) 2 否 否 是
串行化 (serializable) 3 否 否 否
隔离级别的特点:隔离级别从低到高,级离级别越高越平安, 然而锁的内容越高,效率越低

三、读写和异样性
1、read-only(只读性):设置以后办法是否只读
true:只读

false:不是只读【默认值】

<tx:method name="save*" propagation="REQUIRES_NEW" read-only="true|false" isolation="SERIALIZABLE"/>
2、回滚性(rollback-for && no-rollback-for="")
rollback-for: 遇到什么类异样回滚

no-rollback-for: 遇到什么类异样不回滚

<tx:method name="save*" rollback-for="" no-rollback-for="" propagation="REQUIRES_NEW" read-only="true" isolation="SERIALIZABLE"/>
3、timeout 超时性
timeout: -1 永不超时