SpringBoot中事务@Transactional的使用

Spring框架提供了便捷的事务管理。不会对业务调用造成任何干扰。不需要手动开启,提交事务,只需要在类或者方法上进行少量的注解就可以自动完成这些操作。本篇主要介绍了@Transactional注解的使用。

一.概念

1.事务介绍

  • 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部失败。

2.事务的特点

  • 原子性(Atomicity): 事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。事务执行过程中出错,会回滚到事务开始前的状态,所有的操作就像没有发生一样。也就是说事务是一个不可分割的整体,就像化学中学过的原子,是物质构成的基本单位。
  • 一致性(Consistency): 事务开始前和结束后,数据库的完整性约束没有被破坏。比如A向B转账,不可能A扣了钱,B却没收到。
  • 隔离性(Isolation): 同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。
  • 持久性(Durability): 事务完成后,事务对数据库的所有更新将被保存到数据库,不能回滚。

二.Spring中的事务

1.事务管理器

  • 事务管理器接口统一定义了不同持久框架的事务行为,例如(Jpa,Hibernate等)如下

    public interface PlatformTransactionManager extends TransactionManager {
         
    	//根据事务配置获取事务状态
    	TransactionStatus getTransaction(@Nullable TransactionDefinition var1) throws TransactionException;
    	//提交事务
    	void commit(TransactionStatus var1) throws TransactionException;
    	//回滚事务
    	void rollback(TransactionStatus var1) throws TransactionException;
    }
    

2.事务属性定义

  • TransactionDefinition类定义了事务的所有行为,我们在@Transactional注解中使用的属性实际就是配置这些值

    public interface TransactionDefinition {
         
    	int PROPAGATION_REQUIRED = 0;
    	int PROPAGATION_SUPPORTS = 1;
    	int PROPAGATION_MANDATORY = 2;
    	int PROPAGATION_REQUIRES_NEW = 3;
    	int PROPAGATION_NOT_SUPPORTED = 4;
    	int PROPAGATION_NEVER = 5;
    	int PROPAGATION_NESTED = 6;
    	int ISOLATION_DEFAULT = -1;
    	int ISOLATION_READ_UNCOMMITTED = 1;
    	int ISOLATION_READ_COMMITTED = 2;
    	int ISOLATION_REPEATABLE_READ = 4;
    	int ISOLATION_SERIALIZABLE = 8;
    	int TIMEOUT_DEFAULT = -1;
    	//获取事务传播行为
    	default int getPropagationBehavior() {
         
    		return 0;
    	}
    	//获取事务的隔离级别
    	default int getIsolationLevel() {
         
    		return -1;
    	

你可能感兴趣的:(Spring,#,Spring,Boot,#,SpringFramework,spring,事务,transactional,回滚,实现)