• 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篇(下)
    【推荐】 测试角度的并发和幂等问题总结

  • 相关阅读:
    .net GC的工作原理
    ISAPI的作用ASP.NET的HTTP请求的处理方法
    进程和线程
    浅论ViewState及其与Session的关系
    堆和栈的区别
    关于system.resources名称空间引用的问题
    多线程和多进程
    HTTP 状态码含义
    WebView 载入本地的html
    Intentfilter的介绍
  • 原文地址:https://www.cnblogs.com/163yun/p/9870095.html
Copyright © 2020-2023  润新知