当前位置:网站首页>手动事务的几个类
手动事务的几个类
2022-06-24 19:25:00 【叮当的猫猫】
主要的几个类
TransactionManager
PlatformTransactionManager

TransactionStatus

TransactionDefinition,TransactionTemplate

示例
@Service
public class MyService{
@Autowired
DataSourceTransactionManager transactionManager;
public ResultMap lockStockWhenNewOrder(List<StockChangeByOrderDto> goodsModels) {
//2.获取事务定义
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
//3.设置事务隔离级别,开启新事务
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
//4.获得事务状态,相当于开启事物
TransactionStatus transactionStatus = transactionManager.getTransaction(def);
try{
//insert or update ...
transactionManager.commit(transactionStatus);
} catch (InterruptedException e) {
transactionManager.rollback(transactionStatus);
}
}
}
创建一个控制事务的工具类,并交给spring管理
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
@Component
public class TransationUtils {
@Autowired
private PlatformTransactionManager platformTransactionManager;
private TransactionStatus transactionStatus;
/** * 开启事务 * * @return */
public TransactionStatus beginTransaction() {
transactionStatus = platformTransactionManager.getTransaction(new DefaultTransactionDefinition());
return transactionStatus;
}
/** * 提交事务 */
public void commitTransaction() {
if (!transactionStatus.isCompleted()) {
platformTransactionManager.commit(transactionStatus);
}
}
/** * 回滚事务 */
public void rollbackTransaction() {
if (!transactionStatus.isCompleted()) {
platformTransactionManager.rollback(transactionStatus);
}
}
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.stereotype.Component;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.interceptor.DefaultTransactionAttribute;
//编程事务(需要手动begin 手动回滚 手都提交)
@Component
public class TransactionUtils {
// 获取事务源
@Autowired
private DataSourceTransactionManager dataSourceTransactionManager;
// 开启事务
public TransactionStatus begin() {
TransactionStatus transaction = dataSourceTransactionManager.getTransaction(new DefaultTransactionAttribute());
return transaction;
}
// 提交事务
public void commit(TransactionStatus transaction) {
dataSourceTransactionManager.commit(transaction);
}
// 回滚事务
public void rollback(TransactionStatus transaction) {
dataSourceTransactionManager.rollback(transaction);
}
}
在需要使用到事务的类中注入该工具类,并使用
@Autowired
TransationUtils transationUtils;
public void test(){
//开启事务
transationUtils.beginTransaction();
try {
·············
//操作成功提交事务
transationUtils.commitTransaction();
} catch (Exception e) {
//捕获异常回滚事务
transationUtils.rollbackTransaction();
throw new RuntimeException("失败!");
}
}
动开启事务的方法,原理就是在各种情况下判断事务有没有正常结束,如果捕获异常的话就回滚,正常的话就提交
注解事务 @Transactional
springboot 的话可以直接在方法上使用注释 @Transactional(rollbackFor = Exception.class)
自动开启事务,当出现异常时会自动回滚,但是如果使用 try catch 时事务会失效,需要手动回滚事务 ,具体操作如下
try {
······················
}catch (Exception e) {
//手动回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
参考
边栏推荐
- Direct attack on "three summers" production: good harvest news spreads frequently and summer broadcasting is in full swing
- Advanced secret of xtransfer technology newcomers: the treasure you can't miss mentor
- Station B takes goods to learn from New Oriental
- 自己总结的wireshark抓包技巧
- 基于STM32的物联网下智能化养鱼鱼缸控制控制系统
- Docking of arkit and character creator animation curves
- VSCode无网环境快速迁移开发环境(VIP典藏版)
- 介绍BootLoader、PM、kernel和系统开机的总体流程
- [cloud native learning notes] deploy applications through yaml files
- Failed to open after installing Charles without any prompt
猜你喜欢

VirtualBox virtual machine installation win10 Enterprise Edition

Oauth2.0 introduction

BPF_ PROG_ TYPE_ SOCKET_ Filter function implementation

基于STM32的物联网下智能化养鱼鱼缸控制控制系统

OSI and tcp/ip model

Pattern recognition - 9 Decision tree

memcached全面剖析–2. 理解memcached的內存存儲

Remove the screen recording reminder (seven cattle cloud demo)

leetcode_191_2021-10-15

What does CTO (technical director) usually do?
随机推荐
为什么生命科学企业都在陆续上云?
Tutorial on obtaining JD cookies by mobile browser
架构实战营 第 6 期 毕业总结
Distributed basic concepts
Three more days
Page replacement of virtual memory paging mechanism
使用Adb连接设备时提示设备无权限
Foundations of Cryptography
TCP Jprobe utilization problem location
[product design and R & D collaboration tool] Shanghai daoning provides you with blue lake introduction, download, trial and tutorial
Implementation of adjacency table storage array of graph
直击“三夏”生产:丰收喜报频传 夏播紧锣密鼓
Shengzhe technology AI intelligent drowning prevention service launched
Oauth2.0 introduction
Make tea and talk about heroes! Leaders of Fujian Provincial Development and Reform Commission and Fujian municipal business office visited Yurun Health Division for exchange and guidance
OSI and tcp/ip model
188. the best time to buy and sell stocks IV
memcached完全剖析–1. memcached的基础
TCP specifies the source port
【产品设计研发协作工具】上海道宁为您提供蓝湖介绍、下载、试用、教程