总结
- Mysql 四种隔离级别都支持,orangle只支持读写提交和串行化
- 在application.properties中配置默认值
#默认
# -1默认
#1 未提交读
#2 读写提交
#3 可重复读
#4 串行化
#tomcat 数据源默认隔离级别
spring.datasource.tomcat.default-transaction-isolation=2
什么是隔离级别
- Isolation.READ_UNCOMMITTED 未提交读
允许一个事务读取另外一个事务未提交的数据,
出现脏读,应用不广 - Isolation.READ_COMMITTED 读写提交一个事务只能读取另外一个事务已经提交的数据,不能读取未提交的数据
- 可重复读
- Isolation.SERIALIZABLE 串行化
传播行为
1.REQUIRED (常用)需要事务,默认传播行为,如果当前存在事务就沿用,否则新建一个事务在子方法
2. SUPPORTS 支持事务,如果当前存在事务就沿用,如果不存在则采用无事务方式运行子方法
3. MANDATORY 必须使用事务,如果当前没有事务抛出异常,如果存在就沿用
4. REQUIRED_NEW(常用) 无论当前事务是否存在,都会创建新事务运行方法
5. NEVER 不支持事务,如果存在事务就抛出异常,
6. NESTED(常用) 在当前方法调用子方法时,如果子方法发生异常,则只回滚此方法执行过的sql,而不回滚当前方法事务
/**
* 隔离级别,读写提交
* 传播行为,默认传播行为,需要事务,如果调用方法存在事务就沿用,否则创建事务
* @param users
* @return
*/
@Transactional(isolation=Isolation.READ_COMMITTED,propagation=Propagation.REQUIRED)
public int insertUserts(List<User> users){
return 0;
}