Spring事务配置文件的分析

来源:互联网 发布:上海好的java培训机构 编辑:程序博客网 时间:2024/05/01 19:01

先贴出配置文件:

<?xml version="1.0" encoding="utf-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans                 http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   <bean id="dataSource"class="assp.evoucher.common.datasource.AsspDataSourceBean"  init-method="init" destroy-method="close"><property name="uniqueResourceName" value="XADataSource" /><property name="poolSize" value="10" /><property name="maxPoolSize" value="100" /><property name="reapTimeout" value="0"/> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean>    <bean id="atomikosTransactionManager"            class="com.atomikos.icatch.jta.UserTransactionManager"            init-method="init" destroy-method="close" >          <property name="forceShutdown" value="false"/>      </bean>      <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp" >          <property name="transactionTimeout" value="300"/>      </bean>           <bean id="com.atomikos.spring.jms.tm" class="org.springframework.transaction.jta.JtaTransactionManager">          <property name="transactionManager" ref="atomikosTransactionManager"/>          <property name="userTransaction" ref="atomikosUserTransaction"/>      </bean>   <bean id="baseDAO" class="grp.pt.util.BaseDAO"><property name="jdbcTemplate" ref="jdbcTemplate"></property></bean><bean id="transactionInterceptor"             class="org.springframework.transaction.interceptor.TransactionInterceptor">             <property name="transactionManager" ref="com.atomikos.spring.jms.tm" />             <!-- 配置事务属性 -->             <property name="transactionAttributes">                 <props>              <prop key="newTransExecute">PROPAGATION_REQUIRES_NEW,-Exception</prop>             <prop key="*">PROPAGATION_REQUIRED,-Exception</prop>            </props>             </property>         </bean>                <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">             <property name="beanNames">                 <list>                     <value>*Service</value>               </list>             </property>             <property name="interceptorNames">                 <list>                     <value>transactionInterceptor</value>                 </list>             </property>         </bean>             <!-- 小事务公共类,以传播属性PROPAGATION_REQUIRES_NEW执行 --><bean id="smallTranService" class="grp.pt.util.transation.SmallTransService"></bean>     <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"lazy-init="true"/><bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true"><property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/></bean></beans>

下面就逐行分析,理解事务,理解配置的步骤,做到看懂配置文件,熟悉事务配置:


1.数据源

<bean id="dataSource"class="assp.evoucher.common.datasource.AsspDataSourceBean"  init-method="init" destroy-method="close"><property name="uniqueResourceName" value="XADataSource" /><property name="poolSize" value="10" /><property name="maxPoolSize" value="100" /><property name="reapTimeout" value="0"/> </bean>

在class="assp.evoucher.common.datasource.AsspDataSourceBean"当中主要实现afterPropertiesSet方法,对数据库进行相关的操作。

对于init-method="init"配置,可以发现affterPropertiesSet放在执行在init方法执行之前。


2.将数据源绑定到jdbcTemplate,因为公司用的持久层是与JDBC相连接的

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"><property name="dataSource" ref="dataSource"></property></bean>

3.事务管理器配置:

<bean id="atomikosTransactionManager"            class="com.atomikos.icatch.jta.UserTransactionManager"            init-method="init" destroy-method="close" >          <property name="forceShutdown" value="false"/>      </bean>      <bean id="atomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp" >          <property name="transactionTimeout" value="300"/>      </bean>           <bean id="com.atomikos.spring.jms.tm" class="org.springframework.transaction.jta.JtaTransactionManager">          <property name="transactionManager" ref="atomikosTransactionManager"/>          <property name="userTransaction" ref="atomikosUserTransaction"/>      </bean>   
这两个类:com.atomikos.icatch.jta.UserTransactionManager、com.atomikos.icatch.jta.UserTransactionImp是atomikos平台下的两个类,大家应该先了解一下atomikos。这两个事务管理器配置好之后,需要通过Spring来支持:org.springframework.transaction.jta.JtaTransactionManager,我们用到的框架Spring,所以需要将事务管理器通过Spring事务管理器封装一下。


4.将绑定数据源后的jdbcTemplate作为DAO层的支持。

<bean id="baseDAO" class="grp.pt.util.BaseDAO"><property name="jdbcTemplate" ref="jdbcTemplate"></property></bean>


5.配置拦截器,拦截器中配置事务管理器和事务属性

<bean id="transactionInterceptor"             class="org.springframework.transaction.interceptor.TransactionInterceptor">             <property name="transactionManager" ref="com.atomikos.spring.jms.tm" />             <!-- 配置事务属性 -->             <property name="transactionAttributes">                 <props>              <prop key="newTransExecute">PROPAGATION_REQUIRES_NEW,-Exception</prop>             <prop key="*">PROPAGATION_REQUIRED,-Exception</prop>            </props>             </property>         </bean>   

这个地方的事务管理器com.atomikos.spring.jms.tm,和属性方法:*  、newTransExecute。并指定了事务的权限。


6.配置事务创建的代理

  <bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">             <property name="beanNames">                 <list>                     <value>*Service</value>               </list>             </property>             <property name="interceptorNames">                 <list>                     <value>transactionInterceptor</value>                 </list>             </property>         </bean>   

里面配置拦截器和我们需要制定事务控制的类*Service


补充:而外创建一个小事务

 <!-- 小事务公共类,以传播属性PROPAGATION_REQUIRES_NEW执行 --><bean id="smallTranService" class="grp.pt.util.transation.SmallTransService"></bean>     <bean id="nativeJdbcExtractor" class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"lazy-init="true"/><bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler" lazy-init="true"><property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/></bean>


0 0
原创粉丝点击