Spring Boot 声明式事务

发布于:2024-12-20 ⋅ 阅读:(14) ⋅ 点赞:(0)

Spring Boot中的声明式事务管理主要通过@Transactional注解来实现。以下是@Transactional注解的一些关键用法和特性:
1. 启用事务管理
在Spring Boot应用中使用@Transactional注解之前,需要在启动类或者配置类上添加@EnableTransactionManagement注解来启用事务管理支持。
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@SpringBootApplication
@EnableTransactionManagement
public class TransactionManagementApplication {
    public static void main(String[] args) {
        SpringApplication.run(TransactionManagementApplication.class, args);
    }
}

2. 使用@Transactional注解
@Transactional注解可以应用于类或者方法上。如果应用于类上,则该类中的所有方法都会默认拥有声明的事务属性。
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class EmployeeService {
    @Transactional
    public Employee addEmployee(Employee employee) {
        // 数据库操作
        return employee;
    }
}

3. 事务属性
@Transactional注解有多个属性来定制事务行为,包括:
•  propagation:事务的传播行为,默认值为Propagation.REQUIRED,表示如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
•  isolation:事务的隔离级别,默认值为Isolation.DEFAULT,表示使用底层数据库的默认隔离级别。
•  timeout:事务的超时时间,默认值为-1,表示不超时。
•  readOnly:指定事务是否为只读事务,默认值为false。
•  rollbackFor:指定哪些异常会导致事务回滚。
•  noRollbackFor:指定哪些异常不会导致事务回滚。
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 30)
public void createEntity(MyEntity myEntity) {
    myRepository.save(myEntity);
}

4. 事务管理器
Spring Boot会根据添加的依赖自动配置相应的事务管理器。如果添加的是spring-boot-starter-jdbc依赖,框架会默认注入DataSourceTransactionManager实例。如果添加的是spring-boot-starter-data-jpa依赖,框架会默认注入JpaTransactionManager实例。
5. 事务的工作原理
Spring的声明式事务管理是通过Spring AOP实现的,它允许你在配置中声明事务边界,而不是在代码中。这种方式减少了样板代码的数量,让业务逻辑更加清晰,并且在大多数情况下,是更推荐使用的事务管理策略。
6. 事务事件
从Spring 4.2开始,事件的监听器可以绑定到事务的某个阶段。例如,可以在事务成功提交后处理事件。
通过使用@Transactional注解,Spring Boot提供了一种简单而强大的声明式事务管理机制,使得事务管理与业务逻辑解耦,提高了代码的可维护性和可读性。


网站公告

今日签到

点亮在社区的每一天
去签到