一、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:[ˌaɪsəˈleɪʃn]
: 隔离
1、事务个性(事务的基本要素)
java 培训中的事务是指多个操作单元组成的合集,多个单元操作是整体不可分割的,要么都操作不胜利,要么都胜利。其必须遵循四个准则(ACID)。
ACID 指:原子性,一致性,隔离性,持久性
(1)原子性(Atomicity [ˌatəˈmɪsɪti]):
定义:指一个事务要么全副执行, 要么不执行,也就是说一个事务不可能只执行了一半就进行了.
如:你从取款机取钱, 这个事务能够分成两个步骤: 1 划卡,2 出钱. 不可能划了卡, 而钱却没进去. 这两步必须同时实现. 要么就不实现。
(2)一致性(Consistency[kənˈsɪstənsi]):
定义:在事务执行前数据库的数据处于正确的状态,而事务执行实现后数据库的数据还是应该处于正确的状态,即数据完整性束缚没有被毁坏;
如:银行转帐,A 转帐给 B,必须保障 A 的钱肯定转给 B,肯定不会呈现 A 的钱转了但 B 没收到,否则数据库的数据就处于不统一(不正确)的状态。
(3)隔离性(Isolation [ˌaɪsəˈleɪʃn]
定义:并发事务执行之间互不影响,在一个事务外部的操作对其余事务是不产生影响,这须要事务隔离级别来指定隔离性;
(4)持久性(Durability[ˌdʊrəˈbɪləti]
定义:事务一旦执行胜利,它对数据库的数据的扭转必须是永恒的,不会因比方遇到系统故障或断电造成数据不统一或失落。
2、隔离性(事务的隔离级别)
isolation:隔离级别 多个客户端间操作的隔离性【Client——>Service】
(1)DEFAULT: 采纳数据库默认隔离级别(Spring 提供的)
Spring 框架提供的隔离级别,以后应用的数据库对应的默认隔离级别
(2)READ_UNCOMMITTED: 读未提交
解析:不同客户端之间能够在一次事务中读取到其余客户端没有提交的事务
(3)READ_COMMITTED: 读提交 用来防止脏读景象呈现的
read_ommited:oracle 默认隔离级别
解析:不同客户端之间能够在一次事务中读取到其余客户端曾经提交的事务
(4)REPEATABLE_READ: 可反复读次要是用来防止不可反复读景象呈现的
单词:repeatable:[rɪˈpi:təbl] 可反复的
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 永不超时