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

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

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. angular的$watch,$digest和$apply

    第一部分:$watch $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEqu ...

  2. Spring基础知识之装配Bean

    装配(wiring):创建应用对象之间协作关系的行为.这是依赖注入的本质. Spring配置的可选方案 Spring提供了三种装配机智: 1)在XML中进行显示装配 2)在java中进行显示装配 3) ...

  3. flask之Jinja2

    Jinja2 is a library found at http://jinja.pocoo.org/; you can use it to produce formatted text with ...

  4. Chroma Oracle 安装宝典,吐血整理

    尼玛,太坑爹!安装: 1.Chroma Application Service 2. PL SQL 安装Oracle 11g 的步骤和过程: 第一步:只能安装 Oracle 11g 64 bit 数据 ...

  5. Linux系统下如何去掉文件的@属性

    前几天从别处copy了一个memcached.so文件,发现运行不了,用ls -l 看了一下发现memcached.so多了一个@属性,如何去掉这个@属性呢? 第一步:ls -laeO@ 第二步:xa ...

  6. NET代码运行在服务器JS运行在客户端

    using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Web;usi ...

  7. HDU 2544 最短路(邻接表+优先队列+dijstra优化模版)

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  8. HTML5一些元素的整理

    address元素: 定义和用法 <address> 标签定义文档或文章的作者/拥有者的联系信息. 如果 <address> 元素位于 <body> 元素内,则它表 ...

  9. 12-18Windows窗体应用小程序之记事本(1)

    一.记事本制作(1) C#结合窗体制作小程序,相比较之前的控制台应用程序可能要改善了好多,最起码界面看起来可以高仿一下了,但是最重要的还是要看其里面的功能是否实现.所以,要以实现其实用功能为主.今天利 ...

  10. django之admin组件

    一.面向对象复习 1.类的继承 class Base(object): def __init__(self,val): self.val = val def func(self): self.test ...