当前位置:网站首页>手动事务的几个类
手动事务的几个类
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();
}
参考
边栏推荐
- Why are life science enterprises on the cloud in succession?
- Slider控制Animator动画播放进度
- Oauth2.0 introduction
- [product design and R & D collaboration tool] Shanghai daoning provides you with blue lake introduction, download, trial and tutorial
- Analysis of tcpdump packet capturing kernel code
- BBR bandwidth per second conversion logic
- Alibaba cloud lightweight servers open designated ports
- ping: www.baidu. Com: unknown name or service
- Unity about conversion between local and world coordinates
- Ebpf XDP mount point analysis
猜你喜欢

Pattern recognition - 1 Bayesian decision theory_ P1

Oauth2.0 introduction

Memcached comprehensive analysis – 5 Memcached applications and compatible programs

Return of missing persons

JMeter implementation specifies concurrent loop testing

Oauth1.0 introduction

Shengzhe technology AI intelligent drowning prevention service launched

Bld3 getting started UI

关于Unity中的transform.InverseTransformPoint, transform.InverseTransofrmDirection

Fuzhou business office of Fujian development and Reform Commission visited the health department of Yurun university to guide and inspect the work
随机推荐
C语言-关键字1
直击“三夏”生产:丰收喜报频传 夏播紧锣密鼓
leetcode1863_2021-10-14
03---增反膜
Pattern recognition - 1 Bayesian decision theory_ P1
Oauth2.0 introduction
XTransfer技术新人进阶秘诀:不可错过的宝藏Mentor
PKI notes
memcached全面剖析–2. 理解memcached的內存存儲
Memcached comprehensive analysis – 3 Deletion mechanism and development direction of memcached
Ebpf XDP mount point analysis
一文理解OpenStack网络
Sslhandshakeexception: no subject alternative names present - sslhandshakeexception: no subject alternative names present
装修首页自定义全屏视频播放效果gif动态图片制作视频教程播放代码操作设置全屏居中阿里巴巴国际站
架构实战营 第 6 期 毕业总结
01---两列波在相遇处发生干涉的条件
Memcached comprehensive analysis – 2 Understand memcached memory storage
Wireshark packet capturing skills summarized by myself
Graduation summary of phase 6 of the construction practice camp
JMeter implementation specifies concurrent loop testing