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. ...
随机推荐
- 整合SSM
SSM整合:Spring - SpringMVC - MyBatis 1.Spring - MyBatis : 需要整合:将MyBatis的SqlSessionFactory 交给Spr ...
- cookie,session,localStorage和sessionStorage
cookies:存储于浏览器端的数据.可以设置 cookies 的Max-Age或者Expires到期时间,如果不设置时间,则在浏览器关闭窗口的时候会消失. session:存储于服务器端的数据.se ...
- "%Error opening tftp://255.255.255.255/network config"
问题:服务配置错误消息(Service Configuration Error Messages) 有时,在通过Cisco IOS软件启动Cisco设备期间,会显示与这些类似的错误消息: %Error ...
- 杭电2504 又见GCD
又见GCD Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- java之md5加密算法
/** * @author * */ public class MD5 { private static final String[] digital = { "0", " ...
- Linux--如何通过图形界面选项快速更改ubuntu的窗口、图标、分辨率大小,超详细超实用~(适合所有人群)
这是默认ubuntu给出的分辨率大小:800*600,说实话有点小不适合操作. (分辨率800*600) 这是调整后的分辨率大小. (分辨率1400*900) 操作方法: 首先点击选项框中的设置图标- ...
- Python - unittest打印成功信息
参考 https://stackoverflow.com/questions/36834677/print-success-messages-for-asserts-in-python 总结 clas ...
- 在javaweb中对于session的使用
1.初次调用session时: String username="student"; HttpSession session=request.getSession(true);// ...
- Linux下清空文件的3种方法
1.echo -n > test.log #-n选项可以去掉空行 2.cat /dev/null > test.log 3.truncate -s 0 test.log
- 虚拟机安装CentOS详细操作
使用VMware安装CentOS 6.4 环境:Windows7 ,VMware Workstation10,CentOS6.4 为什么选择CentOS ? 主流:目前的Linux操作系统主要应用于生 ...