Spring事务相关配置、案例:转账业务追加日志及事务传播行为

本文介绍了Spring事务配置,如readOnly、timeout等,通过转账业务案例演示如何设置事务传播行为REQUIRES_NEW以确保日志独立于转账操作。重点讲解了propagation属性和不同传播行为的作用。
摘要由CSDN通过智能技术生成

目录

一、Spring事务相关配置

二、案例:转账业务追加日志

三、Spring事务传播行为


一、Spring事务相关配置

属性作用示例
readOnly设置是否为只读事务readOnly=true 只读事务
timeout设置事务超时时间timeout= -1(永不超时)
rollbackFor设置事务回滚异常(class)rollbackFor=(NullPointException.class)
rollbackForClassName设置事务回滚异常(String)同上格式为字符串
noRollbackFor设置事务不回滚异常(class)noRollbackFor=(NullPointException.class)
noRollbackForClassName设置事务不回滚异常(String)同上格式为字符串
propagtion设置事务传播行为......

Spring事务只对RuntimeException()异常或是其子类进行事务回滚,其他异常不回滚,需要回滚,需要rollbackFor手动设置事务回滚。

二、案例:转账业务追加日志

需求:实现任意两个账户间转账操作,并对每次转账操作在数据库进行留痕

需求微缩:A账户减钱,B账户加钱,数据库记录日志

分析:

1、基于转账案例添加日志模块,实现数据库中记录日志

2、业务层转账操作(transfer),调用减钱、加钱与记录日志功能

实现效果预期:

无论转账操作是否成功,均进行转账操作的日志留痕

存在的问题:

日志的记录与转账操作隶属同一事务,同成功同失败

实现效果预期改进:

无论转账操作是否成功,日志必须保留

在业务层接口上添加Spring事务,设置事务传播行为REQUIRES_NEW(需要新事物)

@Service
public class LogServiceImpl implements LogService {

    @Autowired
    private LogDao logDao;

    //propagation设置事务属性:传播行为设置为当前操作需要新事务
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void log(String out,String in,Double money ) {
        logDao.log("转账操作由"+out+"到"+in+",金额:"+money);
    }
}

 基于转账案例添加日志模块,实现数据库中记录日志(4条消息) Spring事务简介及案例:模拟银行账号间转账业务_夏志121的博客-CSDN博客https://blog.csdn.net/m0_61961937/article/details/125359666?spm=1001.2014.3001.5501

import org.apache.ibatis.annotations.Insert;

public interface LogDao {
    @Insert("insert into tbl_log (info,createDate) values(#{info},now())")
    void log(String info);
}

三、Spring事务传播行为

传播属性事务管理员事务协调员
REQUIRED(默认)开启T加入T
新建T2
REQUIRES_NEW开启T新建T
新建T2
SUPPORTS开启T加入T
NOT_SUPPORTED开启T
MANDATORY开启T加入T
ERROR
NEVER开启TERROR
NESTED设置savePoint,一旦事务回滚,事务将回滚到savePoint处,交由客户响应提交/回滚
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏志121

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值