SpringBoot中,声明式事务的使用
一、简介
在 Spring Boot 中使用声明式事务非常简单,主要是通过 Spring 的 @Transactional 注解来实现。
二、使用
1、添加依赖:确保你的项目中已经包含了 Spring Data JPA 或 Spring JDBC 依赖,因为这些依赖包含了事务管理所需的功能。
<!-- 如果使用 Spring Data JPA -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency><!-- 如果使用 Spring JDBC -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
2、启用事务管理:通常在 Spring Boot 中,事务管理默认是启用的。如果需要手动启用,可以在主应用程序类上添加 @EnableTransactionManagement 注解。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;@SpringBootApplication
@EnableTransactionManagement
public class MyApplication {public static void main(String[] args) {SpringApplication.run(MyApplication.class, args);}
}
3、使用 @Transactional 注解:在需要事务管理的方法或类上添加 @Transactional 注解。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class MyService {@Autowiredprivate MyRepository myRepository;@Transactionalpublic void performTransactionalOperation() {// 进行数据库操作myRepository.save(new MyEntity(...));// ...其他操作}
}
4、配置事务属性:@Transactional 注解支持多个属性以配置事务行为,例如 propagation(传播行为)、isolation(隔离级别)、timeout(超时)和 readOnly(只读)。
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 30, readOnly = false)
public void performTransactionalOperation() {// 业务逻辑
}
5、处理异常:默认情况下,Spring 的声明式事务会在出现运行时异常(非检查异常)时回滚事务。如果希望在检查异常时也回滚事务,可以指定 rollbackFor 属性。
@Transactional(rollbackFor = Exception.class)
public void performOperation() throws Exception {// 可能抛出检查异常的操作
}