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 ...
随机推荐
- 前端跨域问题,以及ajax,jsonp,json的区别
看了很多网上的资料,小七感觉都没有完全解决我的疑惑以及问题,所以特意拿出通俗易懂的话讲解跨域问题,以及ajax,jsonp,json的区别.首先先说跨域问题什么时候需要跨域?[1]域名不同(即网址不同 ...
- angular.run 妙用
**1.浏览器判断**在angular做微信应用的时候,有时候我们也想把相同一份代码运行在非微信的浏览器上,这时候我们可以在angular的run上写点东西实现~例如asw.run函数里执行定义一个$ ...
- bzoj 3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛——前缀和优化dp / 排列组合
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3398 好简单呀.而且是自己想出来的. dp[ i ]表示最后一个牡牛在 i 的方案数. 当前 ...
- 学习Linux相关书籍
要推荐的书,我在<那两年炼就的Android内功修养>这篇文章中有提到,这里再列一下出来: 语言类: <深度探索C++对象模型>,对应的英文版是<Inside C+++ ...
- PostgreSQL 监控磁盘使用
监控磁盘使用 1. 判断磁盘用量 每个表都有一个主要的堆磁盘文件,大多数数据都存储在其中.如果一个表有着可能会很宽(尺寸大)的列, 则另外还有一个TOAST文件与这个表相关联, 它用于存储因为太宽而不 ...
- 用nfs挂载内核时出错 ERROR: Cannot umount的解决办法
SMDK2440 # nfs 30000000 192.168.1.106:/work/nfs_root/uImage ERROR: resetting ...
- java中的死锁现象
死锁是这样一种情形:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放.由于线程被无限期地阻塞,因此程序不可能正常终止. java 死锁产生的四个必要条件: 1.互斥使用,即当资源被一个线 ...
- paramiko分开执行多条命令 不像之前一样使用\n
#!/usr/bin/env python#-*- encoding -*- import paramiko transport = paramiko.Transport(('192.168.11.1 ...
- 3.《Spring学习笔记-MVC》系列文章,讲解返回json数据的文章共有3篇,分别为:
转自:https://www.cnblogs.com/ssslinppp/p/4528892.html 概述 在文章:<[Spring学习笔记-MVC-3]SpringMVC返回Json数据-方 ...
- ssh框架搭建实例代码教程步骤
http://blog.csdn.net/u010539352/article/details/49255729