Spring事务配置文件的分析

先贴出配置文件:

<?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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值