如何利用spring注解和try catch处理事务
1、首先配置spring事务,一般都配置在连接数据源所在的在应用程序的xml 文件中,配置事务管理器和spring事务的注解驱动。如下:
2、注解@Transaction驱动如下配置
3、经过上述配置好之后我们就可以使用氆尧彻性@Transaction 了。注解可以加到实现类上、接口上,但是一般最好不要加到接口上,由于接口的注解不能被继承从而会导致事务不起作用。此外注解也可以加到方法上,加到方法上的注解一般会覆盖类上的事务。加到类上意味着类中的每个方法都有此事务。下面就一个实现目的来讲解事务的处理方式。如果我想实现如下图的逻辑我该如何使用事务呢:
4、好的,我们来看实际操作如下例子:
5、上述例子定义了一个普通类,普通类中有个方法,方法中有两个更新语句,大家可以看到第二个更新语句明显是错误的,正常来讲,这两个语句应该作为一个事务处理,只要有一个出现异常都会回滚。针对这个我们做如下控制。下面我们再来定义一个外层的类来调用这个类那么就形成了嵌套如下:
6、由上图可以看到外层调用了内层的方法,如果要控制刚刚说的目的,那我们就可以在外层的类上加个@Transactional 即可。这样就可以使得外层和内存拥有同一个事务。如下图就可以了:
7、大家再仔细看,在上面的基础上,如果我在内层的方法中加上try catch 进行异常捕获,还能控制事务么?如下图
8、根据我尝试的结果更新方法2出现异常后,并没有回滚更新方法1,这是为什么呢?因为加上try catch 后,异常被捕获,更新方法2后发生的异常并没有被给外层的@Transactional,外层的事务并没有被触发,所以此时事务不会滚。那么,如果有的人说,我就是想加try catch怎么办?好,那我们就在try catch 中抛出Runtime异常即可:如下:
9、ok,今天就给大家说到这里。这个例子比较典型,简单的东西说了这么多就是为了让大家记住。