java-mybatis、springmvc 整合,使用 @Transactional 时遇到的事务相关问题
来源:互联网 发布:网络歌手如何赚钱 编辑:程序博客网 时间:2024/06/03 17:47
java-mybatis、springmvc 整合,使用 @Transactional 时遇到的事务相关问题
目标:用最简单的配置,使用 spring @Transactional 注解管理事务
一、问题及解决方案
问题1:配置错误
描述:已经使用 @Transactional 注解,但是在 mybatis 的 sql track 检测到,“Closing non transactional SqlSession" 提示,表示关闭了一个没有事务的 sqlsession
解决:排查是否缺少 DataSourceTransactionManager 和 tx:annotation-driven 的配置,缺一不可
问题2:使用错误
描述:@Transactional 默认只对 unchecked exception 异常进行回滚操作,checked、unchecked 异常使用不当造成事务无效
解决:为了统一在项目定义一个类 RollbackException 异常,该类集成 RuntimeException,约定系统内回滚throw该异常,以免混淆两种异常
二、java 中 checked、unchecked 异常区别
定义:Java语言规范对这两个的定义,将派生于Error或者RuntimeException的异常称为unchecked异常,所有其他的异常成为checked异常。
语法:checked 异常,必须显示的在参数列表后进行 throws 定义或加 try 捕获
三、构建一个 mybatis、springmvc 整合实例,使用两种事务控制方式
目标:用最简单的配置,使用 spring @Transactional 注解管理事务
一、问题及解决方案
问题1:配置错误
描述:已经使用 @Transactional 注解,但是在 mybatis 的 sql track 检测到,“Closing non transactional SqlSession" 提示,表示关闭了一个没有事务的 sqlsession
解决:排查是否缺少 DataSourceTransactionManager 和 tx:annotation-driven 的配置,缺一不可
<!-- 3 事务管理 --> <!-- 3.1 注册(事务管理)transaction manager, use JtaTransactionManager for global tx --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 管理的数据源 --> <property name="dataSource" ref="demoDataSource" /> </bean> <!-- 3.2 开启使用annotation(注解)控制事务,基于类的事务将启用,默认为“基于接口的代理将起作用” --><tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
问题2:使用错误
描述:@Transactional 默认只对 unchecked exception 异常进行回滚操作,checked、unchecked 异常使用不当造成事务无效
解决:为了统一在项目定义一个类 RollbackException 异常,该类集成 RuntimeException,约定系统内回滚throw该异常,以免混淆两种异常
二、java 中 checked、unchecked 异常区别
定义:Java语言规范对这两个的定义,将派生于Error或者RuntimeException的异常称为unchecked异常,所有其他的异常成为checked异常。
语法:checked 异常,必须显示的在参数列表后进行 throws 定义或加 try 捕获
//checked 异常private void testCheckedException() throws Exception{throw new Exception("checked exception");}//unchecked 异常private void testUnCheckedException(){throw new RuntimeException("checked exception");}
三、构建一个 mybatis、springmvc 整合实例,使用两种事务控制方式
/** * 添加记录,测试事务(引发异常则事务自动回滚) * @param info * @param isRollback 是否回滚事务 * @return * @throws Exception */@Transactionalpublic int addUserInfoTranAuto(UserInfoModel info,boolean isRollback){int n = dao.addUserInfo(info);if(isRollback){//注:spring 默认只有运行时异常(unchecked exception)才会回滚事务,即 RuntimeException 及其子类throw new RollbackException("事务回滚(RuntimeException)");}return n;}/** * 添加记录,手动事务控制 * @param info * @param isRollback * @return * @throws Exception */@Transactionalpublic int addUserInfoTranManual(UserInfoModel info,boolean isRollback) throws Exception {try {int n = sqlSession.insert("me.daos.UserInfoDao.addUserInfo",info);if(isRollback){throw new Exception("事务回滚");}sqlSession.commit();return n;} catch (Exception e) {sqlSession.rollback();e.printStackTrace();return -99;}}
0 0
- java-mybatis、springmvc 整合,使用 @Transactional 时遇到的事务相关问题
- springmvc整合mybatis遇到的问题
- Spring、SpringMVC、Mybatis整合遇到的问题
- Mybatis+SpringMVC+注解事务遇到的一些问题及解决
- spring ,springMVC,Mybatis和ehcache整合遇到的问题
- mybatis和springmvc整合遇到的问题小结
- 在配置springmvc整合MyBatis中遇到的各种问题
- SpringMvc+MyBatis+Spring+Maven整合遇到的问题总结
- Springmvc+mybatis+Spring整合遇到的问题总结
- mybatis整合springmvc遇到的问题(待解决)
- 使用springmvc+mybatis时遇到的问题总结
- Spring 整合mybatis时遇到的问题
- springmvc学习笔记(21)-springmvc整合mybatis遇到的问题及解决小结
- springmvc学习笔记(21)-springmvc整合mybatis遇到的问题及解决小结
- 使用springmvc mybatis moven dubbo 遇到的一些问题
- SpringMVC结合Mybatis事务失效的问题
- SpringMVC Mybatis的事务回滚问题
- 在idea里使用SpringBoot整合MyBatis时遇到的Mapper扫描不到的问题
- angularjs运行前准备工作
- 腾讯 一面 二面 2017暑期实习招聘
- kubenetes源码分析之DNS(四)
- Shell显示系统时间的全年日
- Java查询IP地址所在地
- java-mybatis、springmvc 整合,使用 @Transactional 时遇到的事务相关问题
- 数组排序
- Maven手动导入jar IDEA
- Servlet与JSP九大内置对象的对应关系
- 时间控件
- php curl 抓取页面几种方法介绍
- TLS/SSL基础
- 一次减速机报价引发的“血泪”教训
- jhipster 安装使用