标签:llb dir ring 原来 col 默认 spring tab required
1,Propagation 事务的传播行为
Propagation.REQUIRED 如果存在事务,就加入,没有的话就创建(默认值)
比如 A 方法调用 B 方法,如果 A 使用了事务,那么 B 方法加入这个事务,结果就是要吗 AB 方法一起提交,要吗都回滚
Propagation.NOT_SUPPORTED 当前方法不使用事务
Propagation.REQUIRES_NEW 不管是否存在事务,都创建一个新的事务,原来的先挂起,新的书事务行完毕后再执行原来的事务
Propagation.MANDATORY 必须在一个已有的事务中执行,否者抛错
Propagation.NEVER 和 MANDATORY 相反,如果已经存在事务就抛错
2,Isolation 事务的隔离度,默认值采用 DEFAULT
Isolation.READ_UNCOMMITTED 读取未提交数据
Isolation.READ_COMMITTED 读取已提交数据
Isolation.REPEATABLE_REDA 可重复读
Isolation.SERIALIZABLE 串型化
Isolation,DEFAULT 使用数据库默认(默认值)
3,timeout 事务的超时时间,默认值为 -1(表示永不超时)。如果超时还未完成,则回滚事务。只检测 sql 不检测 java 代码
4,readOnly 默认为 false(读写均允许),可以设置为 true
5,rollbackFor 指定能够触发事务回滚的异常类型
6,noRollbackFor 指定事务异常类型,不回滚事务
// 下面的方法 遇到 RuntimeException 异常就会回滚,遇到 WebServiceException 异常不会回滚,会提交 @Transactional(rollbackFor=RuntimeException.class, noRollbackFor=WebServiceException.class) public string pay(Order order){ } // 下面的方法,如果某条 sql 时间超过5秒,会抛出异常,然后回滚 @Transactional(timeout=5) public string pay(Order order){ }
脏读(Dirty Read):获取了未提交的数据
事务1更新了一条数据,事务2获取了这条数据,事务1回滚了,导致事务2获取了数据库没有的数据
不可重复读(Non-repeatable Read):事务两次查询的结果不一样(针对具体数据,因为 update 语句引发)
事务1查询了一条数据,事务2修改了这条数据,事务1再次读取的话结果不一样
幻读(Phantom Read):事务两次相同条件的查询获取的行数不同(针对记录的条数,因为 insert|delete 语句引发)
事务1查询总条数,事务2新增了一条数据,事务1再次查询总条数的
标签:llb dir ring 原来 col 默认 spring tab required
原文地址:https://www.cnblogs.com/huanggy/p/9471866.html