Spring中编程式事务与申明式事务的配置步骤

编程式事务(少用):

  a) 需要事务处理的dao类需继承NamedParameterJdbcDaoSupport这个类;

  b) 在applicationContext.xml文件中配置这个dao的Bean以及数据源Bean;

  c) 往dao中注入数据源;

  d) 配置事务管理器,并往事务管理器中注入数据源;

  e) 往dao中注入事务管理器

 

  a) 需要事务处理的dao类需继承NamedParameterJdbcDaoSupport这个类;

  b) 在applicationContext.xml文件中配置这个dao的Bean以及数据源Bean;

  c) 往dao中注入数据源;

  d) 配置事务管理器,并往事务管理器中注入数据源;

  e) 配置事务模板,并往事务模板中注入事务管理器;

  f) 往dao中注入事务模板。

 

 总结:dao(继承NamedParameterJdbcDaoSupport,并注入数据源)-->事务模板-->事务管理器(数据源)-->数据源

 

 

申明式事务:

  1)使用代理工厂:

       

   步骤1:声明委托对象,如:
   
     
   步骤2:定义事务管理器,如:
   
 
    
  步骤3:创建事务代理父工厂
 
  
注意:1. abstract=true 说明该工厂为抽象工厂,无法进行对象处理,只能被继承
     2. transactionAttributes表示设置事务的传播属性
 
   步骤4:创建事务子工厂
  
  
步骤5:调用:往需要userDao对象的调用者注入userDao
   注意:注入的是代理了userdao对象的事务子工厂,并且使用接口声明。
   如:IUserDao userDaoProxy;
   //省略getset方法
2)使用命名空间(一般使用这个):

 

  步骤1:引入命名空间

   

 

  步骤2:定义事务通知者advice
  

     

  步骤3:再通过aop织入

     

这就是定义了一个PointCut,该Pointcut表示com.softfz.jdbcTemplate包下所有的方法
expression="execution(* com.cj.transaction.service.*.*(..))" 中几个通配符的含义:
第一个 * —— 通配 任意返回值类型
第二个 * —— 通配 com.cj.transaction.service下的任意class
第三个 * —— 通配 com.cj.transaction.service下的任意class的任意方法
第四个 .. —— 通配 方法可以有0个或多个参数
注意:第一个*后面有一个空格
申明式事务中异常处理:

     

Spring中,将为委托对象的每个方法创建事务,Spring的事务支持默认对运行期异常(RuntimeException)进行回滚 ,而RuntimeException无需开发者显式声明。
如果手动捕获异常,则spring容器认为开发者试图进行手动事务回滚,将无法用spring容器来进行事务回滚。
但是如果是发生非RuntimeException及其子类的异常,则spring容器无法进行事务处 ,如果需要管理,需要进行相关配置,代码如下:
<!-- +提交,-回滚,后面为异常类型,表示该方法如果抛出这个异常则进行相应的事务处理 -->
<props>
<prop key="*">PROPAGATION_REQUIRED,-FileNotFoundException</prop>
<prop key="list">readOnly</prop>
</props>
阅读更多
个人分类: Spring
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭