博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Framework--Data Access(1)--Transaction Management(2) - 声明式事务管理(2)
阅读量:4972 次
发布时间:2019-06-12

本文共 1772 字,大约阅读时间需要 5 分钟。

三、声明式事务管理的回滚

(1)推荐使用抛出异常的方式来通知Spring的事务框架一个事务需要被回滚,Spring的事务框架会捕捉调用栈上没有处理的异常,然后决定是否需要回滚事务。

(2)默认情况下,Spring事务框架只在事务执行中发生了runtime,unchecked exception异常时,事务才会被回滚。一般的checked exception默认情况下是不会回滚事务的。

(3)你可以配置哪种类型的异常需要引起事务回滚,包括checked exception,比如:

    
    
  

(4)你也可以配置那种类型的异常不要引起事务回滚,比如:

  
    
    
  

(5)当Spring的事务框架捕捉了一个异常时,它会查看配置的回滚规则,最匹配的规则将会被采用,比如下面配置了除InstrumentNotFoundException之外的所有异常都要引起事务回滚:

  
    
  

(6)你也可以采用编程的方式在异常发生时回滚事务,虽然也很简单,不过这种方式对客户代码来说是侵入性的,和事务API紧耦合了,如果可能的话,强烈推荐事务声明式事务回滚。编程式事务回滚举例:

public void resolvePosition() {  try {    // some business logic...  } catch (NoProductInStockException ex) {    // trigger rollback programmatically    TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();  }}

四、使用@Transactional注解

除了使用xml方式配置事务外,我们还可以使用注解的方式来配置。@Transactional注解可以放到一个接口,接口的方法,一个类或者类的公共方法签名。如下,@Transactional放在一个类的前面。

// the service class that we want to make transactional@Transactionalpublic class DefaultFooService implements FooService {  Foo getFoo(String fooName);  Foo getFoo(String fooName, String barName);  void insertFoo(Foo foo);  void updateFoo(Foo foo);}

仅仅有@Transactional注解还不够激活一个事务行为,它只是一个元数据,必须有能够识别它的事务框架。比如为了使上面的注解生效,我们需要在xml文件使用<tx:annotation-driven>标签来对事务行为进行开关。

  
  
  
  
  
    
    
  
  

<tx:annotation-driven/>标签的transaction-manager属性在它的名字为tansactionManager的时候可以省略不写,否则必须显式的指定,比如上面的txManager。

<tx:annotation-driven/>标签的还有mode("proxy","aspectj")属性,proxy-target-class(true,false)属性,order属性可以配置。

五、事务传播Transaction Propagation

 

 

转载于:https://www.cnblogs.com/winson/p/3686300.html

你可能感兴趣的文章
js跨域问题
查看>>
Excel VBA
查看>>
java IO流
查看>>
Java反射之Bean修改更新属性值等工具类
查看>>
《图解CSS3——第2章 CSS3选择器-3》
查看>>
Exchange Server备份与恢复
查看>>
现在很火的答题赢钱游戏,让我来简单教你怎么做自动答题器
查看>>
转:细数国内市场智能语音开放平台有哪些?
查看>>
移动通信最先进的音频编解码器EVS及用好要做的工作
查看>>
OpenERP button 的三种类型
查看>>
Day 5: How to Learn Grammar....
查看>>
关于OC对象类型数据归档的一个问题
查看>>
javascript之css常用属性
查看>>
winform 承载 WCF 注意,可能不是工作在多线程模式下
查看>>
python-多线程趣味
查看>>
SpReMa-文件存储格式
查看>>
ConcurrentHashMap内存溢出问题
查看>>
Android Layout XML属性研究--android:layout_marginBottom (转载)
查看>>
Digester解析xml文件
查看>>
java之双缓冲的代码粘贴
查看>>