@Transactional
是 Spring 框架提供的声明式事务管理的一个核心注解,主要用于对方法进行事务管理。它能够确保方法在执行过程中的多个操作要么全部成功,要么全部失败。这种事务管理方式可以简化开发人员编写事务管理代码的工作量,提高开发效率。
-
作用范围:
@Transactional
注解可以应用于方法或类上。如果应用于方法上,仅对被注解的方法提供事务管理;如果应用于类上,则对类中的所有方法提供事务管理。 -
事务传播行为:
@Transactional
注解的propagation
属性可以指定事务的传播行为。常见的传播行为有:Propagation.REQUIRED
:默认值,如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。Propagation.REQUIRES_NEW
:创建一个新的事务,如果当前存在事务,则挂起当前事务。Propagation.SUPPORTS
:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式执行。- 其他传播行为还包括:
Propagation.MANDATORY
、Propagation.NOT_SUPPORTED
、Propagation.NEVER
和Propagation.NESTED
。
-
事务隔离级别:
@Transactional
注解的isolation
属性可以指定事务的隔离级别。常见的隔离级别有:Isolation.DEFAULT
:使用后端数据库的默认隔离级别。Isolation.READ_UNCOMMITTED
:最低的隔离级别,允许读取未提交的数据。Isolation.READ_COMMITTED
:保证读取到的数据是已经提交的数据。Isolation.REPEATABLE_READ
:保证在一个事务中,多次读取同一数据的结果是一致的。Isolation.SERIALIZABLE
:最高的隔离级别,完全串行执行事务。
-
事务超时时间:
@Transactional
注解的timeout
属性可以指定事务的超时时间(以秒为单位)。如果事务在指定的时间内没有完成,将被自动回滚。 -
只读属性:
@Transactional
注解的readOnly
属性可以指定事务是否为只读。如果设置为true
,则事务将被标记为只读,这有助于提高数据库性能。 -
回滚规则:
@Transactional
注解的rollbackFor
和noRollbackFor
属性可以指定哪些异常会导致事务回滚,哪些异常不会。 -
事务管理器:
@Transactional
注解的transactionManager
属性可以指定使用的事务管理器(例如:PlatformTransactionManager
)的名称。
以下是一个简单的示例,展示如何在 Spring 应用程序中使用 @Transactional
注解:
java">import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class UserService {@Transactionalpublic void addUser(User user) {// 插入用户信息到数据库}@Transactional(readOnly = true)public User getUser(Long id) {// 根据 ID 查询用户信息}
}
在这个示例中,addUser
方法和 getUser
方法都被 @Transactional
注解修饰,分别表示添加用户操作需要事务支持,而查询用户操作是只读的。