Spring的声明式事务
配置
需要在xml
文件中配置
|
|
tx:advice
节点
<tx:advice.../>
节点详情如下图
name:指定方法的名称可以使用通配符
propagation:指定事务的传播行为,默认为为
PROPAGATION_REQUIRED
PROPAGATION_REQUIRED
:要求在事务环境中执行该方法,如果当前执行线程已经处于事务环境中,则直接调用;如果当前线程不处于事务环境中,则启动新的事务后执行该方法.
PROPAGATION_MANDATORY
:要求调用该方法的线程必须处于事务中,否则抛出异常
PROPAGATION_NESTED
:即使执行该方法的线程已经处于事务中们也依然启动新的事务,方法在嵌套的事务里执行;即使执行该方法的线程未处于事务环境中,也启动新的事务,然后执行该方法,此时与默认情况一致.
PROPAGATION_NEVER
:不允许调用该方法的线程处于事务环境中,如果调用该方法的线程处于事务环境中,则抛出异常
PROPAGATION_NOT_SUPPORTED
:如果调用该方法的线程处于事务中,则先暂停当前事务,然后执行该方法
PROPAGATION_REQUIRED_NEW
:该方法要求在新的事务环境中执行,如果当前执行线程已处于事务环境中,则先暂停当前事务,启动新的事务后执行该方法,如果当前线程不处于事务环境中,则启动新的事务后执行方法.
PROPAGATION_SUPPORTS
:如果当前线程处于事务环境中,则使用当前事务,否则不使用事务isolation:指定事务的隔离级别
timeout:指定事务的超时时间
read-only:指定事务是否只读
rollback-for:指定触发事务回滚的异常类(全类名限定),可以指定多个,用英文逗号
,
隔开no-rollback-for:指定不处罚事务回滚的异常类(全类名限定),可以指定多个,用英文逗号
,
隔开
@Transactional
注解
配置
需要在xml
文件里配置
|
|
@Transactional
注解即可以用于修饰Spring Bean
类,也可以用于修饰Bean
类中的某个方法
如果使用该注解修饰Bean
类,表明这些事务设置对整个Bean
起作用;如果使用该注解修饰Bean
类的方法,则表明这些事务设置只对该方法有效。
@Transactional
注解的属性
isolation:用于指定事物的隔离级别.默认为底层事务的隔离级别
noRollbackFor:用于指定遇到某个特定异常时强制不回滚事务
noRollbackForClassName:指定遇到特定的多个异常时强制不回滚事务,可以指定多个异常类名
propagation:指定事务的传播行为
readOnly:指定是否只读
rollbackFor:指定遇到特定异常时强制回滚事务
rollbackForClassName:指定遇到特定的多个异常时强制回滚事务.可以设置多个异常类名
timeout:指定事务的超时时长
@Transactional
注解中所指定的属性与<tx:advice.../>
元素中所指定的事务属性基本上是对应的。