spring jdbc事务配置demo

1.  前几天自己搞spring的dbcp配置事务,配置了事务,service层调用dao层的两个方法,其中第二个方法时出现异常,但第一个不回滚。但是logger4j日志也提示错误回滚了

     最终定位是配置dbcp时有一个属性defaultAutoCommit属性没有配置,而此属性的默认值是true,所以导致没一步dao操作都会提交,所以不会回滚。

     现将spring的部分配置文件贴出

 

 <bean id="dataSource" 
          class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
        <property name="driverClassName"> 
            <value>oracle.jdbc.driver.OracleDriver</value> 
        </property> 
        <property name="url"> 
            <value>jdbc:oracle:thin:@172.16.147.148:1521:orcl</value> 
        </property> 
        <property name="username"> 
            <value>aaaaaa</value> 
        </property> 
        <property name="password"> 
            <value>aaaaa</value> 
        </property> 
          <property name="defaultAutoCommit">
            <value>false</value>
        </property>
    </bean> 
       
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
                <property name="dataSource" ref="dataSource"/>
        </bean> 
        <tx:advice id="txAdvice" transaction-manager="txManager"> 
                <tx:attributes> 
                        <tx:method name="get*" read-only="true"/> 
                        <tx:method name="set*" read-only="true"/> 
                        <tx:method name="query*" read-only="true"/> 
                        <tx:method name="find*" read-only="true"/> 
                        <tx:method name="load*" read-only="true"/> 
                        <tx:method name="count*" read-only="true"/> 
                        <tx:method name="save*" rollback-for="Exception"/> 
                        <tx:method name="update*" rollback-for="Exception"/> 
                        <tx:method name="delete*" rollback-for="Exception"/> 
                        <tx:method name="merage*" rollback-for="Exception"/>
                        <tx:method name="*" rollback-for="Exception"/>
                </tx:attributes> 
        </tx:advice> 
        <aop:config> 
                <aop:pointcut id="serviceOperation" 
                                            expression="execution(* com.test.service.*Impl.*(..))"/> 
                <aop:advisor advice-ref="txAdvice" 
                                         pointcut-ref="serviceOperation"/> 
        </aop:config> 

 

 

其中

   <property name="defaultAutoCommit">
            <value>false</value>
        </property>


是必须要配置的,因为org.apache.commons.dbcp.BasicDataSource类的defaultAutoCommit属性默认值是true。通过源码可以看到

public class BasicDataSource
    implements DataSource
{

    public BasicDataSource()
    {
        defaultAutoCommit = true;
        defaultReadOnly = null;
        defaultTransactionIsolation = -1;
        defaultCatalog = null;
        driverClassName = null;
        driverClassLoader = null;
        maxActive = 8;
        maxIdle = 8;
        minIdle = 0;
        initialSize = 0;
        maxWait = -1L;
        poolPreparedStatements = false;
        maxOpenPreparedStatements = -1;
        testOnBorrow = true;
        testOnReturn = false;
        timeBetweenEvictionRunsMillis = -1L;
        numTestsPerEvictionRun = 3;
        minEvictableIdleTimeMillis = 1800000L;
        testWhileIdle = false;
        password = null;
        url = null;
        username = null;
        validationQuery = null;
        validationQueryTimeout = -1;
        accessToUnderlyingConnectionAllowed = false;
        restartNeeded = false;
        connectionPool = null;
        connectionProperties = new Properties();
        dataSource = null;
        logWriter = new PrintWriter(System.out);
    }



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值