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(){
	// 业务逻辑处理
}
相关推荐
咖啡八杯1 小时前
GoF设计模式——解释器模式
java·后端·spring·设计模式
GuWenyue1 小时前
Cursor黑盒拆解!1套LangChain.js手写Mini编程Agent,自动生成React项目,效率提升60%
前端·数据库·人工智能
优橙教育2 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
糖果店的幽灵2 小时前
【DeepAgents 从入门到精通】Context Management 上下文管理
java·人工智能·后端·spring·中间件·langgraph·deepagents
腻害兔3 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
Miao121313 小时前
某海外住宿平台如何在大规模场景下实现指标一致性:Minerva 指标平台实践
大数据·数据库·人工智能
SeaTunnel3 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
CodexDave3 小时前
MySQL事务隔离级别与MVCC机制解析
前端·数据库·mysql·nginx·性能优化·负载均衡
碎光拾影4 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
曾阿伦4 小时前
MongoDB 查询语句备忘手册
数据库·mongodb