此文已由作者夏昀授权网易云社区发布。

欢迎访问网易云社区,了解更多网易技术产品运营经验。

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)的更多相关文章

  1. spring分布式事务学习笔记

    最近项目中使用了分布式事务,本文及接下来两篇文章总结一下在项目中学到的知识. 分布式事务对性能有一定的影响,所以不是最佳的解决方案,能通过设计避免最好尽量避免. 分布式事务(Distributed t ...

  2. spring分布式事务学习笔记(1)

    此文已由作者夏昀授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 分布式事务对性能有一定的影响,所以不是最佳的解决方案,能通过设计避免最好尽量避免. 分布式事务(Distrib ...

  3. Spring 源码学习笔记11——Spring事务

    Spring 源码学习笔记11--Spring事务 Spring事务是基于Spring Aop的扩展 AOP的知识参见<Spring 源码学习笔记10--Spring AOP> 图片参考了 ...

  4. Spring 源码学习笔记10——Spring AOP

    Spring 源码学习笔记10--Spring AOP 参考书籍<Spring技术内幕>Spring AOP的实现章节 书有点老,但是里面一些概念还是总结比较到位 源码基于Spring-a ...

  5. Spring源码学习笔记12——总结篇,IOC,Bean的生命周期,三大扩展点

    Spring源码学习笔记12--总结篇,IOC,Bean的生命周期,三大扩展点 参考了Spring 官网文档 https://docs.spring.io/spring-framework/docs/ ...

  6. spring cloud(学习笔记)高可用注册中心(Eureka)的实现(二)

    绪论 前几天我用一种方式实现了spring cloud的高可用,达到两个注册中心,详情见spring cloud(学习笔记)高可用注册中心(Eureka)的实现(一),今天我意外发现,注册中心可以无限 ...

  7. Spring分布式事务实现概览

    分布式事务,一直是实现分布式系统过程中最大的挑战.在只有单个数据源的单服务系统当中,只要这个数据源支持事务,例如大部分关系型数据库,和一些MQ服务,如activeMQ等,我们就可以很容易的实现事务. ...

  8. Spring分布式事务

    [如何实现XA式.非XA式Spring分布式事务] [http://www.importnew.com/15812.html] 在JavaWorld大会上,来自SpringSource的David S ...

  9. Mysql事务学习笔记

    Mysql事务学习笔记 1.事务概述 事务是数据库的执行单元,它包含了一条或多条sql语句,进行的操作是要么全部执行,要么全部都不执行. 2.事务执行命令 语法格式: start transactio ...

随机推荐

  1. 运行flask程序

    Command Line Interface Installing Flask installs the flask script, a Click command line interface, i ...

  2. 根据VM的TAG开停机

    公有云一个非常大的优势,就是可以根据需求进行开停机.由于计费是按时进行的,从而实现节省成本. Azure上用脚本按时开停机已经有很多部署的案例.本文将介绍采用VM Tag中规定的时间进行开停机的脚本. ...

  3. 通过maven的jar包库找到对应的jar包。

    查找连接: http://search.maven.org/ 查找实例 http://search.maven.org/#search|ga|1|a%3A%22log4j%22

  4. git 学习 多个提交用同一个commit

    git add .git commit --amend(连续按连个ZZ)git push -f origin ibm_branch(命令行可能不好用,用IDEA force push好用)

  5. java基础知识(14)---API

    API:(Application Programming Interface,编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理 ...

  6. adb基本命令总结(Android Debug Bridge)

    adb 是PC和设备连接的桥梁,可以通过adb对devices进行相关操作 adb devices           列出你的devices adb kill-server         杀掉ad ...

  7. 第六章 Java性能调优工具(待续)

    Java性能调优工具 Windows工具 JDK命令行工具 JConsole工具 Visual VM多合一工具 Visual VM对QQL的支持 MAT内存分析工具 MAT对QQL的支持 JProfi ...

  8. Linux 正文处理命令及tar vi 编辑器 homework

    作业一: 1) 将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖) cat /etc/passwd /etc/group >/1.txt 2) 将用户信息数据库文件和用 ...

  9. ios配合iTuns提取应用Documents下的文件到本地

    出处:http://blog.csdn.net/jianandjan/article/details/50442988 有一些App需要通过使用iTunes让用户上传和下载文档.要让iOS程序支持iT ...

  10. DAY17-Django之logging

    LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'standard': { 'format': ...