1-6SpringBoot之事务管理@Transactional
以前学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>{}/**
* 帐号Service接口 * @author user * */public interface AccountService { public void transferAccounts(int fromUser,int toUser,float account);}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加钱 } }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(1, 2, 200); 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的更多相关文章
- sping 对 hibernate进行事务管理--Annotation, xml, 大多数使用XML
1. UserServiceTest.java: package com.bjsxt.service; import org.junit.Test; import org.springframewor ...
- spring05-Spring事务管理
事务的第一个方面是传播行为(propagation behavior).当事务方法被另一个事务方法调用时,必须指定事务应该如何传播.例如:方法可能继续在现有事务中运行,也可能开启一个新事务,并在自己的 ...
- SpringBoot事务管理
1.在UserMapper接口中添加更新和删除方法 package com.cppdy.mapper; import org.apache.ibatis.annotations.Delete; imp ...
- java版云笔记(七)之事务管理
事务管理 事务:程序为了保证业务处理的完整性,执行的一条或多条SQL语句. 事务管理:对事务中的SQL语句进行提交或者回滚. 事物管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的 ...
- Spring -- spring结合aop 进行 tx&aspectj事务管理配置方法
1. tx 配置方法, 代码示例 javabean及其映射文件省略,和上篇的一样 CustomerDao.java, dao层接口 public interface CustomerDao { pub ...
- Spring ( 五 )Spring之数据访问与事务管理
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.Spring之数据访问 1.Spring数据访问工程环境搭建 jdbc.properties配置 ...
- 阿里面试挂了,就因为面试官说我Spring 事务管理(器)不熟练?
前言 事务管理,一个被说烂的也被看烂的话题,还是八股文中的基础股之一.但除了八股文中需要熟读并背诵的那些个传播行为之外,背后的"为什么"和核心原理更为重要. 写这篇文章之前,我 ...
- Spring声明式事务管理基于@Transactional注解
概述:我们已知道Spring声明式事务管理有两种常用的方式,一种是基于tx/aop命名空间的xml配置文件,另一种则是基于@Transactional 注解. 第一种方式我已在上文为大 ...
- spring事物配置,声明式事务管理和基于@Transactional注解的使用
http://blog.csdn.net/bao19901210/article/details/41724355 http://www.cnblogs.com/leiOOlei/p/3725911. ...
随机推荐
- 关于Mobility Express转LAP注意事项
在实际的网络环境中,有些时候我们需要将ME模式的AP转换为LAP工作. PS:ME模式是思科8系列的AP可以支持,例如AP1852.AP2802.AP3802等型号.它可以作为控制器使用,同时也可以工 ...
- Catalyst3560密码破解
1.关机:2.将设备MODE键按住,然后开机,进入switch:switch: flash_initInitializing Flash...flashfs[0]: 7 files, 2 direct ...
- vue 使用心得---工作中一些关键点
1.自定义组件 使用 v-for 循环,最好另外多加上 v-bind:key="items_name",这是特殊用的:key,而不是普通的 :属性 例:<Uiroom> ...
- 洛谷P2758编辑距离(线性DP)
题目描述 设A和B是两个字符串.我们要用最少的字符操作次数,将字符串A转换为字符串B.这里所说的字符操作共有三种: 1.删除一个字符: 2.插入一个字符: 3.将一个字符改为另一个字符: !皆为小写字 ...
- 实时监听 mysql 操作,Linux 版
效果 场景:某数据库新增了某条记录,服务器可以监听到变化的数据与操作,如 增加一条记录: id = 1009,name=''test,number = 11 服务器监听结果: 实现过程 测试过程:数据 ...
- 【原】Django问题总结
一:python manage.py makemigrations No changes detected 在修改了models.py后,有些用户会喜欢用python manage.py makemi ...
- letter-spacing 与 word-spacing 结合使用,造成文字反转
文字未反转时,如图: 文字反转时,如图: 以上效果只是因为发现记录下来,目前并无实用,也许未来用得着它.
- UIScrollView学习指南
--前言 笔者结合自己的工作经验,梳理关于UIScrollView究竟需要掌握哪些知识才算是一个好手.至于具体的实施方案,网上资源很多,自行了解吧. --正文 1.涉及到滚动和放大的功能,优先考虑使用 ...
- 二十二 XML校验器
Struts2提供的校验器及其规则:
- Python环境搭建-5 代码编辑器
代码编辑器 Python解释器.pip工具箱和virtuanlenv虚拟环境都安装好了后,基本的Python环境就搭建好了,可以开始我们的"搬砖"之旅了.但是现在还缺一个好用的编辑 ...