12.Spring事务管理概述

这里写目录标题

  • 1 事务管理的核心接口
    • 1.1 PlatformTransactionManager
    • 1.2 TransactionDefinition
    • 1.3 TransactionStatus
  • 2 事务管理的方式

1 事务管理的核心接口

在spring-tx-5.3.12.jar包中,Spring提供了用于事务管理的依赖包,在包org.springframework.transaction中有三个接口文件:PlatformTransactionManager、TransactionDefinition、TransactionStatus。

1.1 PlatformTransactionManager

PlatformTransactionManager 接口是 spring 的事务管理器,它里面提供了我们常用的操作事务的方法。

package org.springframework.transaction;
import org.springframework.lang.Nullable;
public interface PlatformTransactionManager extends TransactionManager {

	TransactionStatus getTransaction(@Nullable TransactionDefinition definition)
			throws TransactionException;
			
	void commit(TransactionStatus status) throws TransactionException;
	
	void rollback(TransactionStatus status) throws TransactionException;

}

方法 说明
TransactionStatus getTransaction(TransactionDefination defination) 获取事务的状态信息
void commit(TransactionStatus status) 提交事务
void rollback(TransactionStatus status) 回滚事务

注意
PlatformTransactionManager 是接口类型,不同的 Dao 层技术则有不同的实现类;

  • org.springframework.jdbc.datasource.DataSourceTransactionManager:用于JDBC或者MyBatis的事务管理。
  • org.springframework.orm.hibernate5.HibernateTransactionManager:用于Hibernate的技术管理。
  • org.springframwork.transaction.jta.JtaTransactionManager:用于配置全局事务管理。

1.2 TransactionDefinition

TransactionDefinition 是事务的定义信息对象,该对象定义了事务规则,并提供了获取事务相关信息的方法:

package org.springframework.transaction;

import org.springframework.lang.Nullable;
//事务的定义信息
public interface TransactionDefinition {

	int PROPAGATION_REQUIRED = 0;
	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;

	int ISOLATION_DEFAULT = -1;
	int ISOLATION_READ_UNCOMMITTED = 1; 
	int ISOLATION_READ_COMMITTED = 2; 
	int ISOLATION_REPEATABLE_READ = 4;  
	int ISOLATION_SERIALIZABLE = 8; 
	
	int TIMEOUT_DEFAULT = -1;


	default int getPropagationBehavior() {
		return PROPAGATION_REQUIRED;
	}

	default int getIsolationLevel() {
		return ISOLATION_DEFAULT;
	}

	default int getTimeout() {
		return TIMEOUT_DEFAULT;
	}

	default boolean isReadOnly() {
		return false;
	}

	@Nullable
	default String getName() {
		return null;
	}

	static TransactionDefinition withDefaults() {
		return StaticTransactionDefinition.INSTANCE;
	}

}

方法 说明
String getName() 获取事务对象的名称
int getIsolationLevel() 获得事务的隔离级别
int getPropogationBehavior() 获得事务的传播行为
int getTimeout() 获得超时时间
boolean isReadOnly() 是否只读

1.事务隔离级别
事务的四大特性:原子性、一致性、隔离性、持久性。

设置隔离级别,可以解决事务并发产生的问题,如脏读、不可重复读和虚读。

  • ISOLATION_DEFAULT
  • ISOLATION_READ_UNCOMMITTED Read uncommitted(读未提交)
  • ISOLATION_READ_COMMITTED Read committed(读提交)
  • ISOLATION_REPEATABLE_READ Repeatable read(可重复读取)
  • ISOLATION_SERIALIZABLE Serializable(可序化)

2.事务传播行为
事物的传播行为是指在同i一个方法中,不同操作前后所使用的事务。传播行为如下所示:
12.Spring事务管理概述_第1张图片
在事务管理过程中,传播行为可以控制是否需要创建事务以及如何创建事务。通常情况下,数据的查询不会影响原数据的改变,所以不需要进行事务管理,而对于数据的插入、更新和删除操作,必须进行事务管理。如果没有指定事务的传播行为,Spring默认传播行为是REQUIRED。

1.3 TransactionStatus

TransactionStatus接口是事务的状态,描述了某一时间点上事务的状态信息。该接口中包含6个方法,具体如下:

  • void flush():刷新事务。
  • boolean hasSavepoint():获取是否存在保存点。
  • boolean isCompleted():获取事务是否完成。
  • boolean isNewTransaction():获取是否是新事务。
  • boolean isRollbackOnly():获取是否回滚。
  • void setRollbackOnly():设置事务回滚。

2 事务管理的方式

Spring的事务管理分为两种方式:一种是传统的编程式事务管理,一种是声明式事务管理。

  • 编程式事务管理
    通过编写代码来实现事务的管理,包括定义事务的开始、正常执行后的事务提交和异常时的事务回滚。

  • 声明式事务管理
    通过AOP技术实现的事务管理,其主要思想是将事务管理作为一个”切面“代码单独编写,然后通过AOP技术将事务管理的切面代码织入业务目标代码中去。

声明式事务管理最大的优点在于无需通过编程的方式来管理事务,只需要在配置文件中进行相关的事务规则声明,就可以将事务规则运用到业务逻辑中去。这样的话在开发中,更加专注于核心业务代码的编写,在一定程度上减少了工作量,提高了开发效率。所以在实际开发中,通常推荐使用声明式事务管理。

你可能感兴趣的:(#,Spring,spring,spring事务管理)