首页 > 编程知识 正文

事务的隔离级别和传播特性,spring的事务隔离与传播

时间:2023-05-05 06:17:11 阅读:147270 作者:3359

springboot事务的传播行为和隔离级别1.springboot中事务的传播行为和隔离级别都在名为TransactionDefinition的接口中定义的传播行为中定义了七种,分别为0-6 //如果当前上下文中已经存在事务,则使用当前事务; 如果当前没有事务,则新事务int PROPAGATION_SUPPORTS=1; //如果当前上下文中已经存在事务,则使用当前事务; 如果当前没有事务但无法打开新事务,则int PROPAGATION_MANDATORY=2作为非事务; //如果当前上下文中已经存在事务,则使用当前事务; 当前没有事务时抛出异常的int PROPAGATION_REQUIRES_NEW=3; //如果当前上下文中已经存在事务,则暂停该事务; 创建新事务并开始执行。 完成后,恢复以前挂起的事务int PROPAGATION_NOT_SUPPORTED=4; //不支持事务。 如果当前上下文中已经存在事务,则保留事务; 以非事务方式执行的int PROPAGATION_NEVER=5; 如果不支持//事务,并且当前上下文中已经存在事务,则抛出异常int PROPAGATION_NESTED=6; //打开嵌套事务(如果当前上下文中已存在事务)。 简单地说,无论当前上下文中是否存在事务,这次都是4种int ISOLATION_DEFAULT=-1; //使用默认隔离级别,数据库的当前隔离级别。 这将是以下四种隔离级别之一int isolation _ read _ uncommitted=1: //未读; 有脏领导,不能重复。 幻像引线为int ISOLATION_READ_COMMITTED=2; //已读; 存在不可重复的读取,幻像读取为int ISOLATION_REPEATABLE_READ=4; //反复阅读int ISOLATION_SERIALIZABLE=8; //关于肮脏的读法、不可重复的读法、幻读,引用《深入浅出MySQL:数据库开发、优化与管理维护(第2版》的记述吧

“脏读”(Dirty Reads )事务对记录进行了更改,在事务完成并提交之前,该记录中的数据不一致。 此时,另一个事务也会来读取同一条记录。 否则,第二个事务读取这些“脏”数据,并在此基础上进行进一步处理时,会发生未提交数据的依赖关系。 这种现象在形象上被称为“污读”。

“不可重新读取”(Non-Repeatable Reads )某个事务在读取数据后的某个时间点重新读取以前读取的数据,但发现读取的数据已更改或某些记录已被删除我说这种现象“不能反复读”。

幻读(Phantom Reads )一个事务在同一查询条件下重新读取以前找到的数据,但发现其他事务插入了满足查询条件的新数据的现象称为幻读。

有关各种隔离级别的说明,请参阅以前文章的隔离和隔离级别

2 .事务属性的默认值在springboot的Transactional注释中定义。 我们在定义事务时,根据实际需要选择这些属性值@target({elementtype.type, element type.method } @ retention (retention policy.runtime ) inherited @ documented public @接口翻译) @ @ aractional String[] label () default {} ); 传播传播传播() default传播. required; //默认传播行为Isolation isolation () default Isolation.DEFAULT; //默认隔离级别int time out (默认- 1; String timeoutString () default ' ); boolean readOnly ()默认假; Class? 扩展能力[ ]回滚for (默认); String[] rollbackForClassName () default {} ); Class? extends throwable [ ] norollbackfor () default {} ); String[] noRollbackForClassName () default {} ); }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。