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(){
	// 业务逻辑处理
}
相关推荐
独自破碎E1 分钟前
PO、VO、BO、DTO、DAO、POJO有什么区别?
java
czlczl200209252 分钟前
从 SSO 登录到跨系统资源访问:OAuth2 全链路交互详解
java·spring boot·后端·spring·架构
fie88895 分钟前
基于蚁群算法求解带时间窗的车辆路径问题
数据库·人工智能·算法
茶本无香6 分钟前
单例模式深度解析:饿汉式与懒汉式的实现与选择
java·单例模式
爬山算法10 分钟前
Hibernate(29)什么是Hibernate的连接池?
java·后端·hibernate
ytttr87311 分钟前
基于人工蜂群算法(ABC)的MATLAB数值计算求解框架
开发语言·算法·matlab
Fuly102413 分钟前
软件研发类项目流程
java
memgLIFE13 分钟前
mybatis数据库查询
数据库·oracle·mybatis
我命由我1234513 分钟前
Android Jetpack Compose - TopAppBar、BottomAppBar、Scaffold
android·java·java-ee·kotlin·android studio·android jetpack·android-studio
Dxy123931021614 分钟前
Python如何使用DrissionPage做自动化:简单入门指南
开发语言·python·自动化