Spring 事务再梳理之 在 SpringBoot 上的小知识

Spring 事务再梳理之 在 SpringBoot 上的小知识

  1. SpringBoot 一般会自动开启事务管理器

在 SpringBootApplication 的主类上添加注解 @EnableTransactionManagement 开启事务管理;

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

但其实,不配置也木有关系,因为 SpringBoot 框架已经帮开发者配置好了(符合某些条件的情况下启用);

在 org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration 类中有下面的代码 ;

	@Configuration
	@ConditionalOnBean(PlatformTransactionManager.class)
	@ConditionalOnMissingBean(AbstractTransactionManagementConfiguration.class)
	public static class EnableTransactionManagementConfiguration {

		@Configuration
		@EnableTransactionManagement(proxyTargetClass = false)
		@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "false", matchIfMissing = false)
		public static class JdkDynamicAutoProxyConfiguration {

		}

		@Configuration
		@EnableTransactionManagement(proxyTargetClass = true)
		@ConditionalOnProperty(prefix = "spring.aop", name = "proxy-target-class", havingValue = "true", matchIfMissing = true)
		public static class CglibAutoProxyConfiguration {

		}

	}

在 PlatformTransactionManager 存在的情况下,且 AbstractTransactionManagementConfiguration 不存在的情况下启用,一般条件下,这些条件都会满足;

  1. @Transactional 使用在 public 方法上

@Transactional 注解只能应用到 public 方法上。 如果应用在 protected、private等方法上,不会报错,不过事务不起作用;

  1. 默认情况,非 RuntimeException 异常不会回滚

默认情况下,Transactional 注解的事物所管理的方法中,如果方法抛出运行时异常Error及子类,那么会进行事务回滚;如果方法抛出的是非运行时异常(包含受检异常),那么不会回滚。

在这里插入图片描述

检查异常属于非运行时异常,不会作出回滚处理;

  1. 注意异常的错误捕获操作

注意:如果直接 catch Exception 异常,然后再抛出 Exception 异常,这时就可能把 RuntimeException 变成了 Exception;
但是 Exception 异常不属于运行时异常,默认在遇到运行时异常时事务才进行回滚,那么这种情况下事务是不会回滚的。
我们可以在 @Transacional 注解中通过设置 rollbackFor = {Exception.class} 来解决这个问题。即:设置当Exception异常或Exception的所有任意子类异常时事物会进行回滚。

即被 catch 处理了的异常,不会被事务作为判断依据;如果异常被 catch 了,但是又在 catch 中抛出了新的异常,那么事务会以这个新的异常作为是否进行回滚的判断依据。

  1. 同一个事务里面,对某一条数据的增删改、 都会影响到这个事务里面接下来的对这个条数的增删改查;

资料来源:https://blog.csdn.net/justry_deng/article/details/80828180

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值