事务属性
事务传播属性
propagation:传播
REQUIRED(默认):需要事务,外部存在事务融入当前事务,外部没有事务,开启新的事务SUPPORTS:支持事务,外部存在事务融入当前事务,外部没有事务,不开启新的事务
REQUIRES_NEW:每次开启新的事务,如果外部存在事务外部事务挂起,开始新的事务运行,运行结束后回复外部事物
NOT_SUPPORTED:不支持事务,如果外部存在事务外部事务挂起,已非事务方式运行
NEVER:不支持事务,存在事务报错
MANDATORY:强制事务没有事务报错
NESTED:嵌套事务,数据库不支持
事务的隔离级别
isolation 隔离级别
DEFAULT:使用对应数据库默认隔离级别四大隔离级别
READ_UNCOMMITTED:读未提交 不同客户端之间可以在一次事务中读取到其他客户端没有提交的数据
READ_COMMITTED:读已提交 不同客户端之间可以在一次事务中读取到其他客户端已经提交的数据 用来避免脏数据现象出现的 oracle默认隔离级别
REPEATABLE_READ:可重复读 一个客户端在一次事务中多次读取一行数据 结果一致[行锁] 用来避免不可重复读现象出现的(在一次事务中一方更新,导致两次查询结果不一致这种情况叫不可重复读) mysql默认隔离级别
SERIALIZABLE:序列化读 一个客户端在一次事务中多次读取一张表的数据 结果一致[表锁] 用来避免幻影读现象出现(在一次事务中一方插入,导致两次查询结果不一致这种情况叫幻影读)隔离级别 从低到高 隔离级别越高越安全 效率越低
读写和异常性
1、readonly
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 永不超时