一:在springboot中使用事物遇到的坑
1.我们知道spring中的事物分为两种:一种是编程式事物,一种是声明式事物。顾名思义,编程式事物是指通过代码去实现事物管理,这里不做过多说明。另一种是声明式事物,分为两种情况01:一种是通过传统xml方式配置,02:使用@Transaction注解方式配置,这是主要讲解的是通过注解方式配置。因为在springboot项目中,会自动配置DataSourceTransactionManager,我们只需要在对应的方法上或者类上加上@Transaction就会自动接入到spring的事物中,让spring管理。
2.继续踩坑
**01坑:**如下图所示,我这边本地调用接口修改数据库张三口袋里面的金额,并且启用了事物管理,抛出RuntimeExecption。这时我们调用接口,我们可以看到事物生效了,数据库里面值并没有发生改变。但是,当我们把抛出的异常改为
throw new SQLTimeoutException(); 调用接口的时候,发现数据库张三的金额被改变了,事物没起作用,明明开启了事物,但是没起作用,这是为什么呢?
02坑: 在我们需要执行事物的方法,如果对异常进行抛出,并且我们手动捕获了这个异常的话,这时候事物也不会起作用