了解@Transactional

昨天对@Transactional中的传播做了记录,今天顺便把@Transactional整体做个了解

value

transactionManager的别名,可以指定使用事务管理器。在一个系统中可以指定不同的事务管理器。

propagation

事务传播行为。

这个已经在昨天做了记录。

propagation

isolation

事务隔离级别。默认是DEFAULT,这是专门为事务传播行为(REQUIRED或REQUIRES_NEW)设计的,因为它只适用于新启动的事务。

一共有4种隔离:

READ_UNCOMMITTED(TransactionDefinition.ISOLATION_READ_UNCOMMITTED),
READ_COMMITTED(TransactionDefinition.ISOLATION_READ_COMMITTED),
REPEATABLE_READ(TransactionDefinition.ISOLATION_REPEATABLE_READ),
SERIALIZABLE(TransactionDefinition.ISOLATION_SERIALIZABLE);

READ_UNCOMMITTED(未提交读)

最低的隔离级别,事务未提交前,就可能被其他事务读取,会出现幻读,脏读,不可重复读。

READ_COMMITTED(提交读)

一个事务提交后才能被其他事务读取到,会造成幻读,不可重复读。

REPEATABLE_READ(可重复读,默认级别)

保证多次读取同一个数据时,其值和事务开始的时候都是一致的,禁止读取到别的事务未提交的数据,会造成幻读。

SERIALIZABLE(序列化)

这是一个代价比较高的隔离级别,可以防止脏读、幻读、不可重复度。

脏读:

一个事务可以读取到另一个事务中未提交的数据

不可重复读:

在一个事务内,多次读取同一个数据

幻读

在一个事务内多次查询的结果不同,可能造成的原因是被另一个事务新增或者删除了第一个事务中的数据,同一个记录的数据被修改了,所有的记录也就发生了改变。

timeout

事务的超时时间,默认为底层事务系统的默认超时(-1),专门为REQUIRED或REQUIRES_NEW新启动的事务

readonly

只读事务(默认false),如果在只读事务时发生了异常,只读事务也是会忽略异常。

从设置的时间点到事务结束的过程中,其他事务提交的数据修改都会忽视,这是就是只读数据为了保障数据的一致性。比如报表查询是一次执行多个查询,这时候就是保障数据的一致性(因为在查询过程中可能有数据会被修改)

rollbackFor

导致事务回滚的异常类数组,必须是Throwable下的子类,默认情况下是在RuntimeException和 Error上回滚

rollbackForClassname

导致事务回滚的异常类名字数组

noRollbackFor

不会导致事务回滚的异常类数组

noRollbackForClassName

不会导致事务回滚的异常类名字数组

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值