Java并发之事务处理

在日常开发中,经常需要处理事务,即要不成功,要么失败。

事务的特点是ACID

一、添加注解

在方法上添加 注解==@Transactional ==可在执行方法执行失败时回滚,但若service 方法中是否抛异常 try catch,若抛异常,可能直接抛出去,对数据库的操作无法回滚。
处理方法:

在catch中手动添加回滚方法

java 复制代码
import org.springframework.transaction.interceptor.TransactionAspectSupport;
// 添加注解
@Transactional(rollbackFor=Exception.class)
public void testTranscations(){
	try{
		// 业务处理代码
	} catch {
		// 手动回滚
		TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
	}
}
二、跨库事务

在长链路调用时场景,可能出现跨库操作,导致程序运行失败
处理方法

可在注解后添加 重开事务

java 复制代码
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Propagation;
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void testTranscations(){
	// 业务逻辑处理
}
相关推荐
GIS阵地3 分钟前
QgsProviderMetadata 详解(基于 QGIS 3.40.13 API)
数据库·qt·arcgis·oracle·gis·开源软件·qgis
c++逐梦人5 分钟前
C++11——— 包装器
开发语言·c++
qq_366086228 分钟前
sql server OUTER APPLY使用
数据库·sql·mysql
Sunshine for you8 分钟前
使用Flask快速搭建轻量级Web应用
jvm·数据库·python
爱丽_10 分钟前
Spring 事务:传播行为、失效场景、回滚规则与最佳实践
java·后端·spring
qwehjk200811 分钟前
如何从Python初学者进阶为专家?
jvm·数据库·python
zzh08115 分钟前
Mysql数据库备份与恢复笔记
数据库·笔记·mysql
zihao_tom22 分钟前
Go环境搭建(vscode调试)
开发语言·vscode·golang
枕布响丸辣28 分钟前
MySQL 数据库备份与恢复全攻略:从基础到实战
数据库·oracle
timi先生30 分钟前
语料库全栈项目部署 (Vue + Java + CQPweb)
java·前端·vue.js