以前学ssh ssm都有事务管理service层通过applicationContext.xml配置,所有service方法都加上事务操作;

用来保证一致性,即service方法里的多个dao操作,要么同时成功,要么同时失败;

springboot下的话 搞一个@Transactional即可;

我们这里搞一个实例,转账实例,A用户转账给B用户xx元

设计如下:

Account类

import javax.persistence.Column;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
 
@Entity
@Table(name="t_account")
public class Account {
 
    @Id
    @GeneratedValue
    private Integer id;
     
    @Column(length=50)
    private String userName;
     
    private float balance;
 
    public Integer getId() {
        return id;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public String getUserName() {
        return userName;
    }
 
    public void setUserName(String userName) {
        this.userName = userName;
    }
 
    public float getBalance() {
        return balance;
    }
 
    public void setBalance(float balance) {
        this.balance = balance;
    }
 
     
     
     
}
 

id 编号 userName用户名 balance余额

运行启动类,数据库里我们加两个数据

新建AccountDao接口

import org.springframework.data.jpa.repository.JpaRepository;

 
import com.java1234.entity.Account;
 
/**
 * 账户Dao接口
 * @author user
 *
 */
public interface AccountDao extends JpaRepository<Account, Integer>{
 
}
 
AccountService接口
 
/**

 * 帐号Service接口
 * @author user
 *
 */
public interface AccountService {
 
    public void transferAccounts(int fromUser,int toUser,float account);
 
}
 
AccountServiceImpl接口实现类
 
import javax.annotation.Resource;

import javax.transaction.Transactional;
 
import org.springframework.stereotype.Service;
 
import com.java1234.dao.AccountDao;
import com.java1234.entity.Account;
import com.java1234.service.AccountService;
 
/**
 * 帐号Service实现类
 * @author user
 *
 */
@Service("accountService")
public class AccountServiceImpl implements AccountService{
 
    @Resource
    private AccountDao accountDao;
 
    public void transferAccounts(int fromUserId, int toUserId, float account) {
        Account fromUserAccount=accountDao.getOne(fromUserId);
        fromUserAccount.setBalance(fromUserAccount.getBalance()-account);
        accountDao.save(fromUserAccount); // fromUser扣钱
         
        Account toUserAccount=accountDao.getOne(toUserId);
        toUserAccount.setBalance(toUserAccount.getBalance()+account);
        accountDao.save(toUserAccount); // toUser加钱
    }
     
     
}
 
AccountController类
 
import javax.annotation.Resource;

 
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
import com.java1234.service.AccountService;
 
/**
 * 账户Controoler类
 * @author user
 *
 */
@RestController
@RequestMapping("/account")
public class AccountController {
 
    @Resource
    private AccountService accountService;
     
    @RequestMapping("/transfer")
    public String transferAccounts(){
        try{
            accountService.transferAccounts(12200);
            return "ok";
        }catch(Exception e){
            return "no";
        }
    }
}
 

我们执行启动类

浏览器输入:http://localhost:8888/account/transfer

运行OK

OK 我们先把数据恢复到700  300

现在我们把service层方法改下

这时候 扣钱dao能执行成功  加钱操作执行不了了 因为前面会报错。

我们重启启动类

浏览器输入:http://localhost:8888/account/transfer

运行NO

这时候 钱扣了 但是 没加钱  导致了数据不一致性

这时候 我们需要用上事务

在service方法上加上@Transactional即可

我们恢复下数据700  300

然后再重启启动类,

浏览器输入:http://localhost:8888/account/transfer

运行NO

但是数据库数据没变化 说明启动作用了。

1-6SpringBoot之事务管理@Transactional的更多相关文章

  1. sping 对 hibernate进行事务管理--Annotation, xml, 大多数使用XML

    1. UserServiceTest.java: package com.bjsxt.service; import org.junit.Test; import org.springframewor ...

  2. spring05-Spring事务管理

    事务的第一个方面是传播行为(propagation behavior).当事务方法被另一个事务方法调用时,必须指定事务应该如何传播.例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的 ...

  3. SpringBoot事务管理

    1.在UserMapper接口中添加更新和删除方法 package com.cppdy.mapper; import org.apache.ibatis.annotations.Delete; imp ...

  4. java版云笔记(七)之事务管理

    事务管理 事务:程序为了保证业务处理的完整性,执行的一条或多条SQL语句. 事务管理:对事务中的SQL语句进行提交或者回滚. 事物管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的 ...

  5. Spring -- spring结合aop 进行 tx&aspectj事务管理配置方法

    1. tx 配置方法, 代码示例 javabean及其映射文件省略,和上篇的一样 CustomerDao.java, dao层接口 public interface CustomerDao { pub ...

  6. Spring ( 五 )Spring之数据访问与事务管理

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.Spring之数据访问 1.Spring数据访问工程环境搭建 ​ jdbc.properties配置 ...

  7. 阿里面试挂了,就因为面试官说我Spring 事务管理(器)不熟练?

    前言 事务管理,一个被说烂的也被看烂的话题,还是八股文中的基础股之一.但除了八股文中需要熟读并背诵的那些个传播行为之外,背后的"为什么"和核心原理更为重要. ​ 写这篇文章之前,我 ...

  8. Spring声明式事务管理基于@Transactional注解

    概述:我们已知道Spring声明式事务管理有两种常用的方式,一种是基于tx/aop命名空间的xml配置文件,另一种则是基于@Transactional 注解.         第一种方式我已在上文为大 ...

  9. spring事物配置,声明式事务管理和基于@Transactional注解的使用

    http://blog.csdn.net/bao19901210/article/details/41724355 http://www.cnblogs.com/leiOOlei/p/3725911. ...

随机推荐

  1. UNL/EVE关联putty和wireshark

    这里默认UNL已经安装完毕,然后启动虚拟机启动UNL. 在浏览器输入http://192.168.1.199/ 进入UNL.然后简单的搭建一个拓扑: 这里只讲R1和ASA开启,先来配置Telnet功能 ...

  2. 转发-【分享】思科无线控制器HA模式升级

    思科无线控制器HA模式下升级文档   当前使用版本:8.0.120.0 计划升级版本:8.2.151.0   其他工具: TFTP Server: 3CDaemon 远程登录:SecureCRT   ...

  3. JPA 级联保存的问题

    前提:系统有学校-学生关系,学校可以包含多个学生,学生只能属于一个学校 在使用 spring-data-jpa 的时候,保存学校的同时保存学生信息,不需要先逐个保存学生信息,再将学生信息放在学校中保存 ...

  4. Jmeter 如何发起一个post请求

    举例平台:https://www.juhe.cn/docs/api/id/65 前提条件: 1)要在聚合网站注册实名认证才可以收到Key,用于Get请求的参数数值 2)Jmeter本地安装好 3.这是 ...

  5. C/S的接口测试工具

    Postman概述: Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果,从而验证响 ...

  6. 启动named服务报错!

    安装及配置bind服务程序: yum -y install bind 三个关键文件: 主配置文件(/etc/named.conf) 区域配置文件(/etc/named.rfc1912.zones) 数 ...

  7. #P2010 回文日期 的题解

    题目描述 在日常生活中,通过年.月.日这三个要素可以表示出一个唯一确定的日期. 牛牛习惯用88位数字表示一个日期,其中,前44位代表年份,接下来22位代表月 份,最后22位代表日期.显然:一个日期只有 ...

  8. javaweb项目中web.xml配置文件的/和/*的区别

    1.拦截"/",可以实现现在很流行的REST风格.很多互联网类型的应用很喜欢这种风格的URL.为了实现REST风格,拦截了所有的请求.同时对*.js,*.jpg等静态文件的访问也就 ...

  9. github 初体验

    一.什么是 Github? github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开. Github 由Chris Wanstrath, ...

  10. sql server alter column identity

    上网找 alter column identity 语句,将表中的一个字段调整成自动新增.发现没有. 跟踪了一下sql server 执行这一动作的语句,发现是新建了新表,将字段修改成自动新增,然后将 ...