spring+mybatis+druid+atomikos+mysql分布式事务日志打印显示回滚但是插入了数据库
使用的是spring+mybatis+druid+atomikos+mysql,
xml配置如下,确实在执行到service层的save*的方法时有日志:
INFO : com.atomikos.icatch.imp.BaseTransactionManager - createCompositeTransaction ( 300000 ): created new ROOT transaction with id com.atomikos.spring.jdbc.tm0000100111
然后在报错的时候,不管是自己抛的运行时异常还是插入已有主键故意报错时都会打印:
INFO : com.atomikos.icatch.imp.CompositeTransactionImp - rollback() done of transaction com.atomikos.spring.jdbc.tm0000100111
但是奇怪的是并没有回滚,数据依然插入了数据库 。
现在由自己查阅资料已知的是:
1.数据库是innodb。支持事务
2.事务配置应该没问题
3.service确实是在spring中加载,controller在spring-servlet的xml中加载。
下面是配置文件,pointcut切点没问题,是我删的。
请大神解答,到底是为什么可以打印日志,但是不回滚
<aop:config expose-proxy="true">
<aop:pointcut expression="execution(* (..))"这句修改了,保证正确
id="datasource-pointcut" />
<aop:advisor pointcut="execution(*..*Service.*(..))"这句修改了,保证正确
advice-ref="txAdvice" />
<aop:aspect ref="dynamicDataSourceAspectJ">
<aop:before method="switchDataSource" pointcut-ref="datasource-pointcut" />
</aop:aspect>
</aop:config>
<tx:advice id="txAdvice" transaction-manager="jtaTransactionManager">
<tx:attributes>
<tx:method name="insert*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="edit*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="autoCommit*" propagation="REQUIRES_NEW" />
<tx:method name="*" propagation="NOT_SUPPORTED" read-only="true" />
</tx:attributes>
</tx:advice>
<bean id="jtaTransactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager"
scope="prototype">
<property name="transactionManager" ref="atomikosTransactionManager" />
<property name="userTransaction" ref="atomikosUserTransaction" />
<property name="allowCustomIsolationLevels" value="true" />
<property name="globalRollbackOnParticipationFailure" value="true" />
</bean>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
就是选择的InnoDB
问题怎么解决的,能否告知一下呢
才看到,什么问题呢?
求分享,遇到 类似问题
求分享一下,目前也是这个问题
啥问题?分享一下呗
问题已解决