Spring boot 事务管理

一、Spring 声明式事务 @Transactional

数据库事务属性都可以由注解@Transactional来配置的,这个注解可以标注在类或者方法上,当它标注在类上时,代表这个类所有公共( public )非静态的方法都将启用事务功能, 一般放在实现类上

@Tansactional 的配置项

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Transactional {
	// 通过bean的name指定事务管理器
    @AliasFor("transactionManager")
    String value() default "";
    
	// 同 value 属性
    @AliasFor("value")
    String transactionManager() default "";
    
	// 指定传播行为
    Propagation propagation() default Propagation.REQUIRED;
	
	// 指定隔离级别
    Isolation isolation() default Isolation.DEFAULT;
	
	// 指定超时时间(单位秒)
    int timeout() default -1;
	
	// 是否只读事务
    boolean readOnly() default false;
	
	// 方法在发生指定异常时回滚,默认所有异常都回滚
    Class<? extends Throwable>[] rollbackFor() default {};
	
	// 方法在发生指定异常名称时回滚,默认所有异常都回滚
    String[] rollbackForClassName() default {};
	
	// 方法在发生指定异常时不回滚, 默认是所有异常都回滚
    Class<? extends Throwable>[] noRollbackFor() default {};
	
	// 方法在发生指定异常名称时不回滚,默认是所有异常都回滚
    String[] noRollbackForClassName() default {};
}

二、事务管理器

当我们使用了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依赖的时候,框 架会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager。所以我们不需要任何额外 配置就可以用@Transactional注解进行事务的使用, 当我们引入其他框架时,还会有其他的事务管理器的类
在这里插入图片描述
PlatformTransactionManager 接口

public interface PlatformTransactionManager extends TransactionManager {
    TransactionStatus getTransaction(@Nullable TransactionDefinition var1) throws TransactionException;
    void commit(TransactionStatus var1) throws TransactionException;
    void rollback(TransactionStatus var1) throws TransactionException;
}

三、事务的隔离级别

数据库事务四个基本特征: 原子性,一致性,隔离性,持久性
四类隔离级别: 未提交读、读写提交、可重复读、串行化

1. 脏读:一个事务 读到 另一个事务 没有提交的数据。

在这里插入图片描述

2.不可重复读:一个事务 读到 另一个事务 已经提交的数据(update更新语句)

在这里插入图片描述

3.虚度(幻读):一个事务 读到 另一个事务 已经提交的数据(insert插入语句)

在这里插入图片描述

read uncommitted :
读未提交,一个事务 读到 另一个事务 没有提交的数据,存在问题3个,解决0个问题

read committed:
读已提交,一个事务 读到 另一个事务 已经提交的数据,存在问题2个,解决1个问题(脏读问题)

repeatable read:
可重复读,一个事务 读到重复的数据,即使另一个事务已经提交。存在问题1个,解决2个问题(脏读、不可重复读)

serializable:
串行化,同时只有一个事务可以操作,另一个事务挂起(暂停),存在问题0个,解决3个问题(脏读、不可重复读、虚读)

在这里插入图片描述

四、事务的传播行为

事务属性之7种传播行为
https://blog.csdn.net/soonfly/article/details/70305683

事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。
例如:methodA事务方法调用methodB事务方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启一个新事务运行,这就是由methodB的事务传播行为决定的。

传播行为是方法之间调用事务采取的策略问题,
在一个批量任务执行的过程中,调用多个交易时,如果有一些交易发生异常,只是回滚那些出现异常的交易,而不是整个批量任务。

在spring中,当一个方法调用另外一个方法时,可以让事务采取不同的策略工作,在Spring 事务机制中对数据库存在七种传播行为

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值