Spring事务管理

Spring事务管理

    • 1. 概念
    • 2.基本用法
    • 3. 用法讨论
      • 3.1 声明式事务管理
      • 3.2 编程式事务管理
    • 4. 底层架构
    • 5.总结

1. 概念

事务(Transaction): 事务是一组数据库操作,它们被看作一个不可分割的工作单元,要么都执行成功,要么都不执行。Spring事务管理支持ACID属性(原子性、一致性、隔离性、持久性)。

Spring框架支持多种事务管理类型,其中最常见的包括声明式事务和编程式事务。事务管理的目的是确保一组操作要么完全执行成功,要么完全不执行。

2.基本用法

Spring事务管理的基本用法:

  • 使用@Transactional注解进行声明式事务管理。
  • 使用TransactionTemplate或PlatformTransactionManager接口进行编程式事务管理。

3. 用法讨论

3.1 声明式事务管理

通过在方法上添加@Transactional注解来声明事务。可以设置隔离级别、传播行为、超时等属性。

// @Transactional注解

@Service
public class MyService {

    @Transactional
    public void operationWithTransaction() {
        // 事务内操作
    }
}
// 事务的传播行为

@Transactional(propagation = Propagation.REQUIRED)
public void requiredTransactionOperation() {
    // 事务内操作
}
// 事务的隔离级别

@Transactional(isolation = Isolation.READ_COMMITTED)
public void readCommittedIsolationOperation() {
    // 事务内操作
}

3.2 编程式事务管理

通过TransactionTemplate或PlatformTransactionManager接口进行编程式事务管理。

// @TransactionTemplate注解

@Service
public class MyService {

    @Autowired
    private MyRepository repository;

    @Autowired
    private PlatformTransactionManager transactionManager;

    public void programmaticTransactionOperation() {
        TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
        transactionTemplate.execute(status -> {
            // 事务内操作
            repository.saveData();
            return null;
        });
    }
}
// 编程式事务回滚

public void programmaticTransactionWithRollback() {
    TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
    transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
    transactionTemplate.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
    transactionTemplate.setReadOnly(true);

    transactionTemplate.execute(status -> {
        try {
            // 事务内操作
            repository.saveData();
        } catch (Exception e) {
            status.setRollbackOnly();
        }
        return null;
    });
}

4. 底层架构

Spring事务管理底层架构利用AOP和代理模式,通过TransactionInterceptor拦截@Transactional注解的方法,利用TransactionAttributeSource提取事务属性,结合PlatformTransactionManager协调事务,最终实现了声明式事务管理,简化开发者对事务的配置和管理,使得在方法层面通过注解就能控制事务的隔离级别、传播行为等属性,而无需显式编写大量事务管理代码。这一架构允许开发者专注于业务逻辑而不用过多关注事务管理的细节。

5.总结

特点 声明式事务管理 编程式事务管理
配置方式 使用@Transactional注解或XML配置事务通知 通过TransactionTemplatePlatformTransactionManager编程式配置
适用范围 适用于整个服务方法或类的所有方法 更灵活,可选择在具体方法内部进行事务管理
配置位置 方法级别的注解或类上的注解 在方法内部或者调用事务方法的方法内部
事务属性 通过注解属性配置事务属性,如隔离级别(isolation)、传播行为(propagation)等 在编程中显式设置事务属性,如隔离级别、传播行为等
事务控制 由Spring容器自动控制事务的开始、提交、回滚 开发者手动控制事务的开始(begin/start)、提交(commit)、回滚(rollback)
逻辑分离 事务逻辑与业务逻辑分离,更清晰 事务逻辑与业务逻辑可能交织在一起,不够清晰
适用场景 适用于简单的事务场景,提高代码可读性 适用于对事务控制要求更为灵活的场景

你可能感兴趣的:(学习笔记,spring,数据库,java)