SpringMVC+Mybatis配置事务,回滚失败。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC+Mybatis配置事务,回滚失败。相关的知识,希望对你有一定的参考价值。

WEB.XML:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application-jdbc.xml</param-value>

<filter>
<filter-name>characterEncoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
<servlet-name>Spring-Servlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application-springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Spring-Servlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

application-springmvc.xml:
<cxt:component-scan base-package="com.gta.xlep">
</cxt:component-scan>

application-jdbc.xml:
<!-- 5. 使用声明式事务 -->
<aop:config>
<aop:advisor pointcut="execution(* com.gta.*.service.*Impl.*(..))"
advice-ref="txAdvice" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="get*" read-only="true" />
<tx:method name="query*" read-only="true" />
<tx:method name="find*" read-only="true" />
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
</tx:attributes>
</tx:advice>
<tx:annotation-driven transaction-manager="transactionManager" />

com.gta.xlep.service.SingleTableServiceImpl
public void saveOrganization(OrganizationVo organization)

参考技术A 数据库:mysql
配置正常,但是事务确无法回滚的奇葩问题
弄了一上午,最终找到问题是由于我在建表的时候并没有指定“ENGINE”,而我当前的数据库版本默认的为“ENGINE=MyISAM”
注意:“MyISAM”是不支持事务的,优点好像是性能比较好
把他改为“InnoDB”即可
alter table 表名 engine=innodb;追问

和数据库无关的

参考技术B <context:component-scan base-package="com.ggg.xlep" >
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan>
jdbc:
<!-- 启动包扫描功能 -->
<cxt:component-scan base-package="com.ggg.xlep">
<cxt:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<cxt本回答被提问者采纳

MyBatis核心配置文件概述

1)environments标签
事务管理器(transactionManager)类型有两种:

•JDBC:这个配置就是直接使用了JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务作用域。
•MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。
          默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。

其中,数据源(dataSource)类型有三种:
•UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。
•POOLED:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来。
•JNDI:这个数据源的实现是为了能在如 EJB 或应用服务器这类容器中使用,容器可以集中或在外部配置数据源,然后放置一个 JNDI 上下文的引用


2)mapper标签
该标签的作用是加载映射的,加载方式有如下几种:

•使用相对于类路径的资源引用,例如:
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>

•使用完全限定资源定位符(URL),例如:
<mapper url="file:///var/mappers/AuthorMapper.xml"/>

•使用映射器接口实现类的完全限定类名,例如:
<mapper class="org.mybatis.builder.AuthorMapper"/>

•将包内的映射器接口实现全部注册为映射器,例如:
<package name="org.mybatis.builder"/>


3)Properties标签
实际开发中,习惯将数据源的配置信息单独抽取成一个properties文件,该标签可以加载额外配置的properties文件
<properties resource="jdbc.properties"></properties>


4)typeAliases标签
<typeAlias type="com.code_g.domain.User" alias="user"></typeAlias>


以上是关于SpringMVC+Mybatis配置事务,回滚失败。的主要内容,如果未能解决你的问题,请参考以下文章

springmvc+mybatis整合的事务管理的问题

MyBatis和SpringMVC集成事务在Junit测试下有效但是在实际项目无效的问题

使用SpringMVC+mybatis+事务控制+JSON 配置最简单WEB

spring配置了事务,抛出异常不回滚

MyBatis核心配置文件概述

springmvc mybatis 整合怎么管理mybatis.xml