@Transactional 是一个Spring框架中的注解,用于声明方法或类中的事务行为。它可以在方法或类级别上标记,用于指定被注解的方法或类应该以事务方式执行。
使用 @Transactional 注解可以为方法或类添加一些事务属性,如事务的传播行为、隔离级别、超时设置等。这些属性可以控制事务的行为,确保数据的一致性和完整性。
常用属性
以下是 @Transactional 注解的一些常用属性:
-
propagation(传播行为):用于指定事务的传播行为,定义了被注解方法与已存在的事务之间的交互关系。常用的传播行为包括 PROPAGATION_REQUIRED、PROPAGATION_REQUIRES_NEW、PROPAGATION_SUPPORTS 等,默认值为 PROPAGATION_REQUIRED。
-
isolation(隔离级别):用于指定事务的隔离级别,定义了事务之间的隔离程度。常用的隔离级别包括 ISOLATION_DEFAULT、ISOLATION_READ_UNCOMMITTED、ISOLATION_READ_COMMITTED、ISOLATION_REPEATABLE_READ、ISOLATION_SERIALIZABLE 等,默认值为 ISOLATION_DEFAULT。
-
timeout(超时设置):用于指定事务的超时时间,单位为秒。如果事务在指定的时间内没有完成,将被强制回滚。默认值为 -1,表示没有超时限制。
-
readOnly(只读事务):用于指定事务是否为只读事务。如果设置为 true,表示事务只读,不会对数据库进行写操作。默认值为 false。
-
rollbackFor(回滚异常):用于指定哪些异常触发事务回滚。可以指定一个或多个异常类型。
-
noRollbackFor(不回滚异常):用于指定哪些异常不会触发事务回滚。可以指定一个或多个异常类型。
示例
示例用法:
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class MyService {
@Transactional
public void performTransaction() {
// 事务操作...
}
@Transactional(rollbackFor = Exception.class, timeout = 60)
public void performTransactionWithAttributes() {
// 含有事务属性的事务操作...
}
}
在上面的示例中,MyService 类标记了 @Transactional 注解,表示其所有的方法都将以事务方式执行。其中,performTransactionWithAttributes 方法使用了一些事务属性,如设置了回滚异常类型为 Exception、超时时间为 60 秒。
@Transactional 注解可以应用于类级别和方法级别。当应用于类级别时,表示该类的所有方法都将采用相同的事务属性,除非在方法级别上对 @Transactional 进行覆盖。在方法级别上使用 @Transactional 注解,可以针对每个方法设置不同的事务属性。
需要注意的是,@Transactional 注解需要与 Spring 事务管理器一起使用。可以配置适当的事务管理器并启用事务管理功能,以便 @Transactional 注解可以生效。