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+款云产品!
更多网易技术、产品、运营经验分享请点击。
相关文章:
【推荐】 在一台服务器上搭建相对高可用HiveServer实践
【推荐】 接口测试之Kotlin篇(下)
【推荐】 测试角度的并发和幂等问题总结
spring分布式事务学习笔记(2)的更多相关文章
- spring分布式事务学习笔记
最近项目中使用了分布式事务,本文及接下来两篇文章总结一下在项目中学到的知识. 分布式事务对性能有一定的影响,所以不是最佳的解决方案,能通过设计避免最好尽量避免. 分布式事务(Distributed t ...
- spring分布式事务学习笔记(1)
此文已由作者夏昀授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 分布式事务对性能有一定的影响,所以不是最佳的解决方案,能通过设计避免最好尽量避免. 分布式事务(Distrib ...
- Spring 源码学习笔记11——Spring事务
Spring 源码学习笔记11--Spring事务 Spring事务是基于Spring Aop的扩展 AOP的知识参见<Spring 源码学习笔记10--Spring AOP> 图片参考了 ...
- Spring 源码学习笔记10——Spring AOP
Spring 源码学习笔记10--Spring AOP 参考书籍<Spring技术内幕>Spring AOP的实现章节 书有点老,但是里面一些概念还是总结比较到位 源码基于Spring-a ...
- Spring源码学习笔记12——总结篇,IOC,Bean的生命周期,三大扩展点
Spring源码学习笔记12--总结篇,IOC,Bean的生命周期,三大扩展点 参考了Spring 官网文档 https://docs.spring.io/spring-framework/docs/ ...
- spring cloud(学习笔记)高可用注册中心(Eureka)的实现(二)
绪论 前几天我用一种方式实现了spring cloud的高可用,达到两个注册中心,详情见spring cloud(学习笔记)高可用注册中心(Eureka)的实现(一),今天我意外发现,注册中心可以无限 ...
- Spring分布式事务实现概览
分布式事务,一直是实现分布式系统过程中最大的挑战.在只有单个数据源的单服务系统当中,只要这个数据源支持事务,例如大部分关系型数据库,和一些MQ服务,如activeMQ等,我们就可以很容易的实现事务. ...
- Spring分布式事务
[如何实现XA式.非XA式Spring分布式事务] [http://www.importnew.com/15812.html] 在JavaWorld大会上,来自SpringSource的David S ...
- Mysql事务学习笔记
Mysql事务学习笔记 1.事务概述 事务是数据库的执行单元,它包含了一条或多条sql语句,进行的操作是要么全部执行,要么全部都不执行. 2.事务执行命令 语法格式: start transactio ...
随机推荐
- Java 虚拟机-Java内存区域
简要介绍Java的内存区域: 运行时数据区域 HotSpot虚拟机对象 一.概览 二.运行时数据区域 2.1 程序计数器 Program Counter Register,代表当前线程所执行的字节码的 ...
- WPF中ToolTip的自定义
ToolTip或者PopUp这个控件在做界面时会经常用到.如何对ToolTip进行自定义呢? 1.首先自定义tooltip的controlTemplate,完全清除系统默认效果, 如下: ...
- 把ASM下的HDD VM转换成ARM下Managed Disk的SSD VM
在ASM下,要把HDD的VM转换成SSD的VM步骤非常复杂.需要手工把Disk从普通存储账户复制到高级存储账户.再通过这个Disk创建VM. 目前在有了ASM到ARM的迁移工具,以及Managed D ...
- GXT-资源篇
官方下载地址:https://www.sencha.com/products/gxt/download/ 百度网盘下载地址:http://pan.baidu.com/s/1eRhAusE Blog资源 ...
- xargs 命令使用小记
ls -1|xargs -t -i mv {} noncredit{} 注意: ls -1 是123的1,不是lmn的l
- MyCAT 1.6 安装部署
1 mycat 安装部署 1 下载解压Mycat-server-1.6-RELEASE-20161010173036-linux.tar.gz 到/usr/local/mycat 2 下载解压jdk- ...
- eval(function(p,a,c,k,e,r)解密程序
以eval(function(p,a,c,k,e,r){e=function(c)开头的js文件是经过加密的 使用下面方法可以对js文件进行加密.解密 步骤:1.新建html页面,内容如下列代码 2. ...
- MessageBox如何输出整数
int cx=10;CString s;s.Format(_T("整数是:%d"),cx);MessageBox(s);
- JVM Class Loading过程
转自:<Java Performance>第三章 VM Class Loading The Hotspot VM supports class loading as defined by ...
- leetcode661
vector<vector<int>> imageSmoother(vector<vector<int>>& M) { ; vector< ...