我的项目中采用的是spring+ibatis,现在需要事务管理,由于需要事务的地方也不多,所以就直接参考spring手册,采用编程式的事务管理,但是总是不能够回滚?我的代码如下:
ApplicationContext context = new ClassPathXmlApplicationContext("com/teamsun/uap/dao/DaoBeans.xml");
//获取PlatformTransactionManager;
PlatformTransactionManager transManager = (PlatformTransactionManager) context.getBean("transactionManager");
//定义TransactionDefinition;
DefaultTransactionDefinition transDef = new DefaultTransactionDefinition();
//定义Transaction传播行为;
transDef.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
//开始一个Transaction;
TransactionStatus ts = transManager.getTransaction(transDef);
try{
//然后是我的数据操作逻辑,先update一条数据,然后再插入一条数据(故意让他出错)
}catch(Exception e){
transManager.rollback(ts);
return;
}
transManager.commit(ts);执行完毕后,查询数据库发现第一条update操作成功了,并没有回滚?后来我又换成编程式事务中的TransactionTemplate的方式,还是不能回滚.实在没办法,我又参考文档改为声明式事务管理:配置如下:
<!-- DataSource -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<!--<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">-->
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://167.46.80.199:3306/testdb?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean> <bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="target" ref="deptService"/>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
按照说明,这样配置应该就是target属性指定的deptService类中的以get开头的方法中如果出现runtimeException就会自动回滚,但是我测试还是不能回滚,看了半天,在网上也找了很久也都是说这么写的,找不到原因啊,各位高手们请指点指点啊,我实在没辙了.
拜托拜托了,高手指点啊
ApplicationContext context = new ClassPathXmlApplicationContext("com/teamsun/uap/dao/DaoBeans.xml");
//获取PlatformTransactionManager;
PlatformTransactionManager transManager = (PlatformTransactionManager) context.getBean("transactionManager");
//定义TransactionDefinition;
DefaultTransactionDefinition transDef = new DefaultTransactionDefinition();
//定义Transaction传播行为;
transDef.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
//开始一个Transaction;
TransactionStatus ts = transManager.getTransaction(transDef);
try{
//然后是我的数据操作逻辑,先update一条数据,然后再插入一条数据(故意让他出错)
}catch(Exception e){
transManager.rollback(ts);
return;
}
transManager.commit(ts);执行完毕后,查询数据库发现第一条update操作成功了,并没有回滚?后来我又换成编程式事务中的TransactionTemplate的方式,还是不能回滚.实在没办法,我又参考文档改为声明式事务管理:配置如下:
<!-- DataSource -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<!--<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">-->
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://167.46.80.199:3306/testdb?useUnicode=true&characterEncoding=UTF-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean> <bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
<property name="transactionManager"><ref bean="transactionManager"/></property>
<property name="target" ref="deptService"/>
<property name="transactionAttributes">
<props>
<prop key="get*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
按照说明,这样配置应该就是target属性指定的deptService类中的以get开头的方法中如果出现runtimeException就会自动回滚,但是我测试还是不能回滚,看了半天,在网上也找了很久也都是说这么写的,找不到原因啊,各位高手们请指点指点啊,我实在没辙了.
拜托拜托了,高手指点啊
解决方案 »
- 急!!!请各位大神看看为什么我在hibernate配置weblogic的连接池有错误?
- ssh框架中如何从用户去分配角色
- 请教了解【普元-EOS】开发java的朋友。
- 新手高分急求教JavaEE5.0项目如何更改成6.0项目
- 入职一段时间了有点迷茫....大牛们谈谈自己是怎么走过来的把...
- 我适合做JAVA吗?
- 想请问下各位高手:外面的JAVA行情如何???
- 如何实现数据的逐级上传?
- 编译生成容器代码的工具weblogic.ejbc从哪里来?
- ****※※※※※66分求助EJB部署问题!****&&&&&&&&&&
- 如何学习JAVA才最快,最有效?
- a question about Maven2
楼主【sflong】截止到2008-08-01 16:28:05的历史汇总数据(不包括此帖):
发帖的总数量:1 发帖的总分数:0 每贴平均分数:0
回帖的总数量:0 得分贴总数量:0 回帖的得分率:0%
结贴的总数量:0 结贴的总分数:0
无满意结贴数:0 无满意结贴分:0
未结的帖子数:1 未结的总分数:0
结贴的百分比:0.00 % 结分的百分比:---------------------
无满意结贴率:---------------------无满意结分率:---------------------
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=sflong