- 什么是 Spring 事务管理?
Spring 事务管理是 Spring 框架中用于管理事务的一套机制。Spring 事务管理提供了统一的事务管理抽象层,允许开发者在不同的事务管理实现中进行切换,例如 JDBC API、JTA、Hibernate、JPA 等。
- Spring 事务管理的传播特性有哪些?
Spring 事务管理支持以下 7 种传播特性:PROPAGATION_REQUIRED、PROPAGATION_SUPPORTS、PROPAGATION_MANDATORY、PROPAGATION_REQUIRES_NEW、PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER 和 PROPAGATION_NESTED。
- 什么是 Spring 事务的隔离级别?
Spring 事务的隔离级别是指在多线程环境下,事务之间的隔离层次。Spring 支持 4 种事务隔离级别:READ_UNCOMMITTED(读未提交)、READ_COMMITTED(读已提交)、REPEATABLE_READ(可重复读)和 SERIALIZABLE(串行化)。
- Spring 事务管理的实现方式有哪些?
Spring 事务管理可以通过编程方式来实现,也可以通过配置文件来实现。编程式事务是通过编写代码来进行事务控制、管理事务,而声明式事务是通过配置文件、注解等方式来实现事务控制,将事务管理从业务代码中解耦,使业务代码更加简洁、易于维护。
- 如何配置声明式事务?
可以通过在 Spring 配置文件中进行配置,或使用注解进行配置。在配置文件中可以使用 和 标签来实现声明式事务,也可以使用 @Transactional 注解进行配置。
- Spring 事务的原理是什么?
Spring 事务管理的工作原理是通过 AOP 技术实现的,使用了代理设计模式和动态代理技术。Spring 通过事务代理机制为事务方法的开始或结束创建了增强代码,通过拦截方法调用,将事务边界与事务处理代码分离。
- 如何进行手动控制 Spring 事务?
可以使用 Spring 的事务管理接口 PlatformTransactionManager 进行手动事务控制,在 Spring 应用中需要进行更加细粒度的事务管理时,可以使用该方式手动控制事务。
8.Spring 事务管理支持的 7 种传播特性:
- PROPAGATION_REQUIRED
PROPAGATION_REQUIRED 是默认的传播机制,表示将当前方法加入到任何一个已经存在的事务中,如果没有事务,则开启一个新的事务。
@Transactional(propagation = Propagation.REQUIRED)
public void method1() {
// 方法1代码块
method2();
}
@Transactional(propagation = Propagation.REQUIRED)
public void method2() {
// 方法2代码块
}
在上述代码中,当 method1 调用 method2 时,如果当前已经存在一个事务,则 method2 将加入该事务中;否则,method2 将运行于一个新的事务中。
- PROPAGATION_SUPPORTS
PROPAGATION_SUPPORTS 表示当前方法在事务的环境下运行,如果没有事务,则以非事务方式运行。
@Transactional(propagation = Propagation.SUPPORTS)
public void method1() {
// 方法1代码块
method2();
}
@Transactional(propagation = Propagation.SUPPORTS)
public void method2() {
// 方法2代码块
}
在上述代码中,当 method1 调用 method2 时,如果当前已经存在一个事务,则 method2 将运行在该事务中;否则,method2 将以非事务方式运行。
- PROPAGATION_MANDATORY
PROPAGATION_MANDATORY 表示当前方法必须在一个已经存在的事务中运行,否则将抛出异常。
@Transactional(propagation = Propagation.MANDATORY)
public void method1() {
// 方法1代码块
method2();
}
@Transactional(propagation = Propagation.MANDATORY)
public void method2() {
// 方法2代码块
}
在上述代码中,当 method1 调用 method2 时,如果当前已经存在一个事务,则 method2 将运行在该事务中;否则,将抛出异常。
- PROPAGATION_REQUIRES_NEW
PROPAGATION_REQUIRES_NEW 表示当前方法必须在一个新的、独立的事务中运行,如果存在一个事务,将被挂起。
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void method1() {
// 方法1代码块
method2();
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void method2() {
// 方法2代码块
}
在上述代码中,当 method1 调用 method2 时,会为 method2 创建一个新的事务,独立于 method1 运行。
- PROPAGATION_NOT_SUPPORTED
PROPAGATION_NOT_SUPPORTED 表示当前方法不在事务环境下运行,如果存在一个事务,将被挂起。
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void method1() {
// 方法1代码块
method2();
}
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void method2() {
// 方法2代码块
}
在上述代码中,当 method1 调用 method2 时,method2 将不会在事务环境下运行,即使当前存在一个事务也会被挂起。
- PROPAGATION_NEVER
PROPAGATION_NEVER 表示当前方法不应该在事务环境下运行,如果存在一个事务,则抛出异常。
@Transactional(propagation = Propagation.NEVER)
public void method1() {
// 方法1代码块
method2();
}
@Transactional(propagation = Propagation.NEVER)
public void method2() {
// 方法2代码块
}
在上述代码中,当 method1 调用 method2 时,如果当前已经存在一个事务,则会抛出异常。
- PROPAGATION_NESTED
PROPAGATION_NESTED 表示创建一个新的事务,作为嵌套事务运行,如果存在一个事务,则该嵌套事务将在该事务的上下文中运行。
@Transactional(propagation = Propagation.NESTED)
public void method1() {
// 方法1代码块
method2();
}
@Transactional(propagation = Propagation.NESTED)
public void method2() {
// 方法2代码块
}
在上述代码中,当 method1 调用 method2 时,会为 method2 创建一个新的嵌套事务,独立于当前事务运行,如果 method2 发生异常将回滚至嵌套事务的保存点。
Spring事务管理提供了一套机制,包括PROPAGATION_REQUIRED、PROPAGATION_SUPPORTS等7种传播特性,以及READ_UNCOMMITTED到SERIALIZABLE的4种隔离级别。它可以声明式或编程式实现,基于AOP进行事务控制,如@Transaction注解用于声明事务属性。
1783

被折叠的 条评论
为什么被折叠?



