第六章 springboot + 事务(转载)
本篇博客转发自:http://www.cnblogs.com/java-zhao/p/5350106.html
在实际开发中,其实很少会用到事务,一般情况下事务用的比较多的是在金钱计算方面。
mybatis与spring集成后,其事务该怎么做?其实很简单,直接在上一节代码的基础上在相应的方法(通常是service层)上加上@Transactional注解即可。
1、com.xxx.firstboot.exception.UserException
package com.xxx.firstboot.exception; import org.springframework.dao.DataAccessException; /**
* 自定义异常,用于测试事务
*/
public class UserException extends DataAccessException{ private static final long serialVersionUID = 8901479830692029025L; public UserException(String msg) {
super(msg);
} }
说明:这是一个自定义注解,继承了DataAccessException类。
2、com.xxx.firstboot.dao.UserDao
public int insertUser(String username, String password){
return userMapper.insertUser(username, password);
} public void testTransactional(String username){
throw new UserException("测试事务");
}
说明:该类中对于事务的测试只使用到了两个方法,第二个方法testTransactional抛出自定义的异常。
3、com.xxx.firstboot.service.UserService
@Transactional
public void testTransaction(String username, String password){
System.out.println(userDao.insertUser(username, password));
userDao.testTransactional(username);
}
说明:在该方法中调用了上述的userDao的两个方法。
第一个方法向数据库插入一条数据,第二个方法抛出我们的自定义异常,如果事务配置成功,那么第一个方法插入数据库会回滚,否则,插入数据成功。
4、com.xxx.firstboot.controller.UserController
@ApiOperation("测试事务")
@ApiImplicitParams({
@ApiImplicitParam(paramType="query",name="username",dataType="String",required=true,value="用户的姓名",defaultValue="zhaojigang"),
@ApiImplicitParam(paramType="query",name="password",dataType="String",required=true,value="用户的密码",defaultValue="wangna")
})
@ApiResponses({
@ApiResponse(code=400,message="请求参数没填好"),
@ApiResponse(code=404,message="请求路径没有或页面跳转路径不对")
})
@RequestMapping(value="/testTransaction",method=RequestMethod.GET)
public void testTransaction(@RequestParam("username") String username,
@RequestParam("password") String password) {
userService.testTransaction(username, password);
}
测试:
使用maven命令启动服务-->swagger运行URL-->查看数据库是否插入成功
疑问:查了很多资料,mybatis与springboot集成后(数据源采用了druid),为了添加事务,很多人会在上一节的MyBatisConfig这个类中做两件事请
- 在MyBatisConfig类上添加@EnableTransactionManagement注解,该注解启用了注解式事务管理 <tx:annotation-driven />,这样在方法上的@Transactional注解就起作用了,但是实际测试中不加这句,@Transactional注解依然有用
- 在MyBatisConfig类中添加了获取事务管理器的方法
/**
* 配置事务管理器
*/
@Bean
@Primary
public DataSourceTransactionManager transactionManager() throws Exception{
return new DataSourceTransactionManager(getDataSource());
}
添加这句的作用:在使用@Transactional注解的地方使用方法中的事务管理器进行事务管理。
第六章 springboot + 事务(转载)的更多相关文章
- 第六章 springboot + 事务
在实际开发中,其实很少会用到事务,一般情况下事务用的比较多的是在金钱计算方面. mybatis与spring集成后,其事务该怎么做?其实很简单,直接在上一节代码的基础上在相应的方法(通常是servic ...
- 第十六章 springboot + OKhttp + String.format
模拟浏览器向服务器发送请求四种方式: jdk原生的Http包下的一些类 httpclient(比较原始,不怎么用了):第一章 HttpClient的使用 Okhttp(好用,推荐) retrofit( ...
- 第五章 springboot + mybatis(转载)
本编博客转发自:http://www.cnblogs.com/java-zhao/p/5350021.html springboot集成了springJDBC与JPA,但是没有集成mybatis,所以 ...
- 第三章 springboot + jedisCluster(转载)
本编博客转发自:http://www.cnblogs.com/java-zhao/p/5347703.html 如果使用的是redis2.x,在项目中使用客户端分片(Shard)机制. 如果使用的是r ...
- 第七章 springboot + retrofit(转载)
本篇博客转发自:http://www.cnblogs.com/java-zhao/p/5350861.html retrofit:一套RESTful架构的Android(Java)客户端实现. 好处: ...
- 第四章 springboot + swagger(转载)
此篇博客转发自:http://www.cnblogs.com/java-zhao/p/5348113.html swagger用于定义API文档. 好处: 前后端分离开发 API文档非常明确 测试的时 ...
- SpringBoot | 第二十六章:邮件发送
前言 讲解了日志相关的知识点后.今天来点相对简单的,一般上,我们在开发一些注册功能.发送验证码或者订单服务时,都会通过短信或者邮件的方式通知消费者,注册或者订单的相关信息.而且基本上邮件的内容都是模版 ...
- 【转载】Gradle学习 第六章:构建脚本基础
转载地址:http://ask.android-studio.org/?/article/11 6.1. Projects and tasks 项目和任务Everything in Gradle si ...
- 【第十六章】 springboot + OKhttp + String.format
模拟浏览器向服务器发送请求四种方式: jdk原生的Http包下的一些类 httpclient(比较原始,不怎么用了):第一章 HttpClient的使用 Okhttp(好用,推荐) retrofit( ...
随机推荐
- (分享)FreeVideo1.6.1 VIP视频播放器(支持下载)
软件名字:FreeVideo 版 本 号 :v 1.6.1 开发语言:易语言 压缩加壳:VMP 3.0 beta 皮 肤:易简约定制版(白色) 模块使用:乐易.精易.皮肤 主要技术:其实没啥 ...
- Session操作
存储API localStorage和sessionStorage通常被当做普通的JavaScript对象使用:通过设置属性来存储字符串值,查询该属性来读取该值.除此之外,这两个对象还提供了更加正式的 ...
- log4j输出模板
log4j.rootLogger=DEBUG, A1,A2 log4j.appender.A1.MaxFileSize=1kb#10个备份 log4j.appender.A1.MaxBackupInd ...
- ReadReadMe
∮博客说明 §标题格式说明(只在这篇文档中说明一次) 此站博客分两类 普通博客,补丁博客 普通博客标题格式为 NumberType_Title Number: 博客编号 ,按时间编号,编号只在 ...
- jquery中的ajax参数
jquery中将ajax封装成了函数,我们使用起来非常方便,jquery会自动根据内容选择post还是get方式提交数据,并且会自动编码,但是要想完全掌握jquery中的ajax,我们必须将它的各个参 ...
- 移动端自动化环境搭建-Appium Client的安装和AppiumLibrary库的安装
A.安装依赖 appium client是配合原生的webdriver来使用的(特别是用java而不用maven的同学),因此二者必须配合使用缺一不可. B.安装过程 1.在线安装 pip insta ...
- Socket原理与编程基础
一.Socket简介 Socket是进程通讯的一种方式,即调用这个网络库的一些API函数实现分布在不同主机的相关进程之间的数据交换. 几个定义: (1)IP地址:即依照TCP/IP协议分配给本地主机的 ...
- NSJSONSerialization 组json字符串
抄的网上的. 主要是组织列表部分 NSDictionary *song = [NSDictionary dictionaryWithObjectsAndKeys:",@"lengt ...
- caffe源码阅读(一)convert_imageset.cpp注释
PS:本系列为本人初步学习caffe所记,由于理解尚浅,其中多有不足之处和错误之处,有待改正. 一.实现方法 首先,将文件名与它对应的标签用 std::pair 存储起来,其中first存储文件名,s ...
- Kafka报错-as it has seen zxid 0x83808 our last zxid is 0x0 client must try another server
as it has seen zxid 0x83808 our last zxid is 0x0 client must try another server 停止zookeeper,删除datadi ...