在日常开发中,经常需要处理事务,即要不成功,要么失败。
事务的特点是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(){
// 业务逻辑处理
}