Spring的事务

- 之前提到过父子事务引入的一些问题,此处再补充一下一些Spring中的事务的细节。

- Spring中一般我们采用@Transaction注解来实现事务的控制。

- 此注解只能用来修饰public的方法,或者类中(只对类中的所有public方法生效)

- 可以通过Propogation来设置事务的传播行为,常见的有:

        - Required:如果有事务则继承该事务,如果没有事务则创建新事务

        - Required_New: 不管当前有无事务,强制新建一个独立事务

        - Nested: 如果当前存在事务,则创建一个依赖于父事务的子事务,随父事务提交一起提交。但是不同的是可以独立回滚。

- 还需要注意的是Spring的事务注解中,默认只会回滚运行时异常与Error。像一些检查型异常,例如IOException,SqlException等等则不会回滚,如果希望这些异常也会滚,可以在注解中添加rollbackFor字段,或者在try-catch中抛出运行时异常。

- 还有一个常见的问题就是在同一个类中调用使用了@Transaction注解方法时,这个事务注解不会生效。因为事务注解是使用AOP的机制实现的,也就是说,代理的方法只有在被其他类调用的时候才会拦截并生效。

你可能感兴趣的:(spring,java,数据库)