spring jdbc事务配置demo
2012-08-29 10:29
274 查看
1. 前几天自己搞spring的dbcp配置事务,配置了事务,service层调用dao层的两个方法,其中第二个方法时出现异常,但第一个不回滚。但是logger4j日志也提示错误回滚了
最终定位是配置dbcp时有一个属性defaultAutoCommit属性没有配置,而此属性的默认值是true,所以导致没一步dao操作都会提交,所以不会回滚。
现将spring的部分配置文件贴出
其中
是必须要配置的,因为org.apache.commons.dbcp.BasicDataSource类的defaultAutoCommit属性默认值是true。通过源码可以看到
最终定位是配置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); }
相关文章推荐
- 在spring中使用JDBC事务配置
- spring(JDBC)事务配置
- 【Spring】在Spring框架下使用注解配置JDBC事务
- Spring JDBC-使用注解配置声明式事务
- spring 同时配置hibernate and jdbc 事务
- spring 同时配置hibernate and jdbc 事务
- 配置Spring JDBC的事务回滚失效
- spring 同时配置hibernate and jdbc 事务
- 18.01.24,web学习第四十五天,还有半年,努力吧青年 Spring第三天 aop事务配置+Spring整合jdbc操作
- Spring JDBC和Hibernate混用时,如何配置事务管理
- 【Spring】spring-mvc hibernate druid jdbc等数据源事务配置详解(解决注解事务不生效问题)
- 在Spring中采用声明式方法对Hibernate和JDBC进行统一的事务配置(AOP)
- spring jdbc 事务配置----TransactionTemplate使用
- spring 通过JDBC事务管理 中切面的配置
- 在Spring中采用声明式方法对Hibernate和JDBC进行统一的事务配置(AOP)
- 在Spring中采用声明式方法对Hibernate和JDBC进行统一的事务配置(AOP)
- spring 同时配置hibernate and jdbc 事务
- spring数据源配置及事务管理--jdbc
- spring配置JDBC事务
- 使用注解方式配置spring中的jdbc事务