spring分布式事务学习笔记(2)
此文已由作者夏昀授权网易云社区发布。
欢迎访问网易云社区,了解更多网易技术产品运营经验。
Model类如下:package com.xy.model
1 package com.xy.model;2 3 /**4 * Created by helloworld on 2015/1/30.5 */6 public class NameQa {7 private long id;8 private String nameQa;9 10 public long getId() { 11 return id; 12 } 13 14 public void setId(long id) { 15 this.id = id; 16 } 17 18 public String getNameQa() { 19 return nameQa; 20 } 21 22 public void setNameQa(String nameQa) { 23 this.nameQa = nameQa; 24 } 25 }
1 package com.xy.model;2 3 /**4 * Created by helloworld on 2015/1/30.5 */6 public class NameDev {7 private long id;8 private String nameDev;9 10 public long getId() { 11 return id; 12 } 13 14 public void setId(long id) { 15 this.id = id; 16 } 17 18 public String getNameDev() { 19 return nameDev; 20 } 21 22 public void setNameDev(String nameDev) { 23 this.nameDev = nameDev; 24 } 25 }
qa数据源的mybatis mapper接口 package com.xy.dao
1 package com.xy.dao;2 3 import com.xy.model.NameQa;4 5 /**6 * Created by helloworld on 2015/1/30.7 */8 public interface NameQaMapper {9 int insert(NameQa nameQa); 10 }
dev数据源的mybatis mapper接口 package com.xy.devdao
1 package com.xy.daodev;2 3 import com.xy.model.NameDev;4 5 /**6 * Created by helloworld on 2015/1/30.7 */8 public interface NameDevMapper {9 int insert(NameDev nameDev); 10 }
处理事务的service
1 package com.xy.service;2 3 import com.xy.dao.NameQaMapper;4 import com.xy.daodev.NameDevMapper;5 import com.xy.model.NameDev;6 import com.xy.model.NameQa;7 import org.springframework.beans.factory.annotation.Autowired;8 import org.springframework.stereotype.Service;9 import org.springframework.transaction.annotation.Transactional;10 11 /** 12 * Created by helloworld on 2015/1/30. 13 */ 14 @Service 15 public class NameService { 16 @Autowired 17 NameQaMapper nameQaMapper; 18 @Autowired 19 NameDevMapper nameDevMapper; 20 21 @Transactional(rollbackFor = Exception.class) 22 public void addQaAndDev(boolean hasException) throws Exception { 23 NameQa nameQa = new NameQa(); 24 nameQa.setNameQa("qa"); 25 nameQaMapper.insert(nameQa); 26 27 NameDev nameDev = new NameDev(); 28 nameDev.setNameDev("dev"); 29 nameDevMapper.insert(nameDev); 30 31 if(hasException) { 32 throw new Exception(); 33 } 34 } 35 36 37 }
controller代码
1 package com.xy.controller;2 3 import com.xy.service.NameService;4 import org.springframework.beans.factory.annotation.Autowired;5 import org.springframework.stereotype.Controller;6 import org.springframework.ui.ModelMap;7 import org.springframework.web.bind.annotation.RequestMapping;8 import org.springframework.web.bind.annotation.RequestMethod;9 import org.springframework.web.bind.annotation.RequestParam; 10 11 /** 12 * Created by helloworld on 2014/11/22. 13 */ 14 @Controller 15 public class mybatisController { 16 17 @Autowired 18 NameService nameService; 19 20 @RequestMapping(value = "/addName", method = RequestMethod.POST) 21 ModelMap addName(@RequestParam("hasException") boolean hasException) { 22 try { 23 nameService.addQaAndDev(hasException); 24 } catch (Exception e) { 25 e.printStackTrace(); 26 return new ModelMap("false"); 27 } 28 return new ModelMap("true"); 29 } 30 31 32 }
将项目打成war包,命名为mybatis.war部署在tomcat上。
测试:
request parameters: hasException=false
返回:true 数据添加成功
request parameters: hasException=true
返回:false 两个数据库数据都未添加
网易云免费体验馆,0成本体验20+款云产品!
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 从海报视觉到网页设计
【推荐】 【你离硅谷只差一步】网易中国创业家大赛项目火热征集中
【推荐】 关于Runtime.getRuntime().exec()产生阻塞的2个陷阱
转载于:https://www.cnblogs.com/zyfd/p/9870097.html
spring分布式事务学习笔记(2)相关推荐
- Spring Boot 2 学习笔记(2 / 2)
Spring Boot 2 学习笔记(1 / 2) - - - 45.web实验-抽取公共页面 46.web实验-遍历数据与页面bug修改 47.视图解析-[源码分析]-视图解析器与视图 48.拦截器 ...
- ci mysql 事务_MySQL事务-学习笔记
MySQL事务-学习笔记 MySQL事务 事务的意义 案例:银行转账过程 A向B转账500,A原来有1000,B有500. 分析: SQL处理过程: A 减少 500 B 增加 500 以上两点必须同 ...
- Spring分布式事务实现
分布式事务是指操作多个数据库之间的事务,spring的org.springframework.transaction.jta.JtaTransactionManager,提供了分布式事务支持.如果使用 ...
- spring分布式事务示例_Spring声明式事务示例
spring分布式事务示例 事务是具有ACID (原子,一致,隔离和持久)属性的工作单元. 原子意味着所有更改都发生或什么都没有发生. 如果从一个帐户借钱并记入另一个帐户,则交易将确保借记和贷项均已完 ...
- Spring Boot 框架学习笔记(五)( SpringSecurity安全框架 )
Spring Boot 框架学习笔记(五) SpringSecurity安全框架 概述 作用 开发示例: 1. 新建项目 2. 引入依赖 3. 编写`SecurityConfig`类,实现认证,授权, ...
- Spring Boot 框架学习笔记(二)(配置文件与数据注入 yaml基本语法 JSR303数据验证 多环境切换 )
Spring Boot 框架学习笔记(二) 六.appliaction.properties配置与数据注入 6.1 `@Value`注解 测试注入数据 读取输入流 6.2 读取配置文件数据注入 单文件 ...
- Spring源码学习笔记:起源发展和核心模块主要职能
1.博客内容均出自于咕泡学院架构师第三期 2.架构师系列内容:架构师学习笔记(持续更新) 1.Spring 的前世今生 早在 2007 年,一个基于 Java语言的开源框架正式发布,取了一个非常有活力 ...
- Spring源码学习笔记:经典设计模式之装饰者模式
1.博客内容均出自于咕泡学院架构师第三期 2.架构师系列内容:架构师学习笔记(持续更新) 0.装饰者模式(Decorator Pattern) 指在不改变原有对象的基础之上,将功能附加到对象上,提供了 ...
- Spring源码学习笔记:经典设计模式之代理模式
1.博客内容均出自于咕泡学院架构师第三期 2.架构师系列内容:架构师学习笔记(持续更新) 0.代理模式(Proxy Pattern) 指为其他对象提供一种代理,以控制对这个对象的访问.代理对象在客户端 ...
最新文章
- Codeforces Round #367 (Div. 2)
- OpenStack 业务链networking-sfc介绍 (2) - 底层原理
- 马斯克的火箭,这次没!爆!炸!
- 20145305 《信息安全系统设计基础》第6周学习总结
- ubuntu(deepin)安装apache2并支持php7.0
- memcached和php关系,php – memcacheD这没关系?
- docker push到私有仓库、pull
- iOS关于rar解压第三方库Unrar4iOS使用总结
- Windows下安装和配置Maven的方法及注意事项
- 关于《构建之法》阅读笔记 的致歉博客
- mfc gridctrl 设置某列自动伸长_三明桥梁智能张拉设备数控智能张拉系统全自动智能张拉系统...
- sql按时间取去重最近_Sqlserver如何单独对某列去重
- 2021 年了,TensorFlow 和 PyTorch 两个深度学习框架地位又有什么变化吗?
- 全新版本的SoundSource for Mac - 优质的音频控制软件
- Openwrt 摄像头使用
- OpenCL快速入门教程
- linux下的mysql调优_MySQL调优三步曲(慢查询、explain profile)
- 贴片钽电容封装及规格和参数资料
- 查看pagesize和blocksize以及inodesize
- USB有线网卡怎么用
热门文章
- python语言精通_Python语言基础从入门到精通
- 画出的点做交互_设计之下交互设计原型设计之概念设计
- python笔记全_Python笔记
- html语言dl与ul,HTML中DL、UL、OL用哪个比较好
- android studio smssdk,SMSSDK for Android 配置
- java月历组件_vue之手把手教你写日历组件
- 如何用c 控制mysql数据库_用C语言操作MySQL数据库
- C++ 内存基本构件 placement new
- string concat_Java String concat()方法与示例
- Java RandomAccessFile writeBytes()方法与示例