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
- Spring事务配置文件的分析
- spring管理事务的配置文件
- 关于同时用Spring和SpringMVC配置文件,导致事务失效的分析
- Spring事务配置文件方式
- 使用spring管理事务的时候,配置文件的主意事项。
- spring 配置事务---配置文件方式
- Spring声明式事务配置文件
- spring hibernate整合时配置文件的事务部分(spring管理事务)
- Spring 配置文件中关于事务控制的3种方式
- Spring Transaction 分析事务属性(事务的基本概念、配置)
- Spring源码分析-配置文件的解析(二)
- Spring 事务属性分析
- spring事务特性分析
- Spring事务分析
- Spring事务源码分析
- spring 事务源码分析
- 【Spring】从源码分析Spring配置文件的加载
- spring配置文件application.xml中的事务总结
- HDU 1698 Just a hook 线段树(段更新,段询问)
- 哪本书是对程序员最有影响、每个程序员都该阅读的书?
- debug in proxy and some net interface
- android学习(android)的四大组
- Cognos仪表盘(二)组件概述
- Spring事务配置文件的分析
- sql server 通配符
- 利用NIO构造简单的聊天功能
- LwIP源码分析2-ARP
- 创建型模式之工厂方法模式(FactoryMethod)
- 一道面试算法题
- C#委托
- android引入unity-classes.jar之后进行混淆的问题解决
- DPM目标检测算法(毕业论文节选)