当前位置:编程学习 > JAVA >>

spring 3.x 实现事务的几种方式

一、使用编程方式
 
数据源、事务的底层配置
 
[html]  
<?xml version="1.0" encoding="UTF-8"?>    
<beans xmlns="http://www.springframework.org/schema/beans"    
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
    xmlns:tx="http://www.springframework.org/schema/tx"    
    xsi:schemaLocation="http://www.springframework.org/schema/beans     
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd     
    http://www.springframework.org/schema/tx       
    http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">    
        
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">    
        <property name="driver" value="com.mysql.jdbc.Driver" />    
        <property name="driverUrl" value="jdbc:mysql://localhost:3306/test" />    
        <property name="user" value="username" />    
        <property name="password" value="userpwd" />   
    </bean>    
        
    <!-- jdbc事务管理器 -->    
    <bean id="transactionManager"    
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    
        <property name="dataSource">    
            <ref local="dataSource" />    
        </property>    
    </bean>    
    <!--事务模板 -->    
    <bean id="transactionTemplate"    
        class="org.springframework.transaction.support.TransactionTemplate">    
        <property name="transactionManager">    
            <ref local="transactionManager" />    
        </property>    www.zzzyk.com
        <!--ISOLATION_DEFAULT 表示由使用的数据库决定  -->    
        <property name="isolationLevelName" value="ISOLATION_DEFAULT"/>    
        <property name="propagationBehaviorName" value="PROPAGATION_REQUIRED"/>    
        <!-- <property name="timeout" value="30"/> -->    
    </bean>   
</beans>   
 
DAO层的配置
 
[html] 
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">    
    <property name="dataSource" ref="dataSource"/>    
</bean>      
<bean id="merchantMapDAO" class="cn.com.nantian.epayment.dao.MerchantMapDAO">    
    <property name="jdbcTemplate" ref="jdbcTemplate"/>    
</bean>    
<bean id="payOrderDAO" class="cn.com.nantian.epayment.dao.PayOrderDAO">    
    <property name="jdbcTemplate" ref="jdbcTemplate"/>    
</bean>   
 
SERVICE层的配置
 
[html]  
<bean id="elecChnlFrontPayService"    
    class="cn.com.nantian.epayment.pay.service.ElecChnlFrontPayServiceImpl">    
    <property name="merchantMapDAO" ref="merchantMapDAO" />    
    <property name="payOrderDAO" ref="payOrderDAO" />    
    <property name="transactionTemplate" ref="transactionTemplate" />    
</bean>  
 
程序示例代码
 
[java] 
private PayOrderDAO payOrderDAO;    
    
protected TransactionTemplate transactionTemplate;    
    
/**  
 * 保存支付订单  
 */    
protected PayOrder savePayReq(final PayOrder payOrder) {    
    
    PayOrder order = (PayOrder) this.transactionTemplate.execute(new TransactionCallback() {    
                @Override    
                public Object doInTransaction(TransactionStatus status) {    
                    // 查看是否已经存在支付订单,如果已经存在则返回订单主键     
                    PayOrder payOrderTemp = payOrderDAO.findOrder(String.valueOf(payOrder.getPayOrderId()));    
    
                    // 由支付渠道类型(PayChannelType)转换得到交易类型(PayType)     
                    if (payOrder.getPayChannelId().equalsIgnoreCase(PAY_CHNL_ACT_BAL)) {// 账户余额支付     
                        payOrder.setPayType("3");    
                    } else if (payOrder.getPayChannelId().equalsIgnoreCase(PAY_CHNL_FAST_PAY)) {// 联通快捷支付     
                        payOrder.setPayType("4");    
                    } else {// 网银网关支付     
                        payOrder.setPayType("2");    
                    }    
    
                    // 比对新的支付金额与原订单金额是否一致,如不一致则提示错误     
                    if (payOrderTemp == null) {    
                    &
补充:软件开发 , Java ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,