Spring的事务管理
基于 @Transactional
基于 @Transactional的方式是最简单,最容易上手的一种事务实现方式
它也是Spring 2.x引入的基于注解(Annotation)的方式。
他的作用范围为接口,接口方法,类,类方法。
当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,
同时,如果再方法级别使用该注解会覆盖类级别的事务属性定义。
看一下配置和代码:
配置(启动事务注解扫描):
transaction-manager 属性的默认值是 transactionManager,如果事务管理器 Bean 的名字为该值,则可以省略该属性。可以通过设置@Transactional的属性来赋予相应的事务处理属性。
@Transactional具体属性如下:
属性 作用
isolation 指定事务隔离级别。默认为底层持久化框架的事务隔离级别
propagation 指定事务传播行为
readOnly 指定事务是否为只读
timeout 指定事务超时时间
noRollbackFor 指定抛出或捕获特定的异常时强制不回滚事务
noRollbackForClassName 指定抛出或捕获多个特定的异常时强制不回滚事务。可以指定多个异常类名
RollbackFor 指定抛出或捕获特定的异常时强制回滚事务
RollbackForClassName 指定抛出或捕获特定的异常时强制回滚事务。可以指定多个异常类名
注意点:
@Transactional 注解用于接口或接口方法时,只有在使用基于接口的代理时它才会生效(有实现类)。
@Transactional 注解应该只能被应用到 public 方法上。这是由AOP本质决定的。如果在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,都将被忽略,而且不会抛出任何异常。