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
开启T
ERROR
NESTED 设置savePoint,一旦事务回滚,事务将回滚到savePoint处,交由客户响应提交/回滚
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
15天前
|
SQL Java 数据库连接
(自用)Spring常用配置
(自用)Spring常用配置
16 0
|
5天前
|
Java
log4j异常日志过滤规则配置
log4j异常日志过滤规则配置
15 0
|
8天前
|
存储 安全 Java
第2章 Spring Security 的环境设置与基础配置(2024 最新版)(下)
第2章 Spring Security 的环境设置与基础配置(2024 最新版)(下)
16 0
|
8天前
|
安全 Java 数据库
第2章 Spring Security 的环境设置与基础配置(2024 最新版)(上)
第2章 Spring Security 的环境设置与基础配置(2024 最新版)
34 0
|
9天前
|
安全 Java Spring
Spring Security 5.7 最新配置细节(直接就能用),WebSecurityConfigurerAdapter 已废弃
Spring Security 5.7 最新配置细节(直接就能用),WebSecurityConfigurerAdapter 已废弃
21 0
|
9天前
|
安全 Java 应用服务中间件
江帅帅:Spring Boot 底层级探索系列 03 - 简单配置
江帅帅:Spring Boot 底层级探索系列 03 - 简单配置
25 0
江帅帅:Spring Boot 底层级探索系列 03 - 简单配置
|
15天前
|
JSON Java 数据库连接
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
属性注入掌握:Spring Boot配置属性的高级技巧与最佳实践
23 1
|
15天前
|
Java 数据库连接 Spring
简化配置,提高灵活性:Spring中的参数化配置技巧
简化配置,提高灵活性:Spring中的参数化配置技巧
20 0
|
15天前
|
Java Shell 测试技术
一次配置,多场景适用:Spring Boot多套配置文件的深度剖析
一次配置,多场景适用:Spring Boot多套配置文件的深度剖析
32 0
一次配置,多场景适用:Spring Boot多套配置文件的深度剖析
|
19天前
|
Java 容器
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
SpringBoot使用配置注解开启自动配置功能&整合spring-boot-configuration-processor
15 0