性能优化!Spring大事务7条优化建议及示例

文摘   2024-11-24 10:30   新疆  

最新实战案例锦集:《Spring Boot3实战案例合集》持续更新,每天至少更新一篇文章,订阅后将赠送文章最后展示的所有MD文档(学习笔记)。

环境:SpringBoot3.2.5



1. 简介

什么是大事务?它指的是运行时间较长、操作数据较多的事务,这类事务容易导致系统响应缓慢,并可能引发一系列问题,如锁等待、死锁、接口超时、数据库主从延迟、事务回滚时间长以及数据库连接池被占满等。

大事务问题产生的原因通常包括操作的数据量大、大量的锁竞争以及事务中其他非数据库操作的耗时较长等。这些问题会导致数据库连接池容易被撑爆,锁定太多数据造成阻塞和锁超时等。

为了解决大事务问题,我总结了以下七点优化建议,希望能为你提供帮助。

2. 优化建议

2.1 分解大事务

将大事务拆分为多个小事务,以减少每个事务的锁定时间和资源占用。如下示例:

优化前

@Transactionalpublic void placeOrderOld(Long productId, Long userId, int quantity) {  // 1.更新库存  inventoryService.decreaseStock(productId, quantity) ;  // 2.生成订单  Order order = new Order(userId, productId, quantity) ;  orderRepository.save(order);  // 3.增加用户积分  userService.updateUserPoints(userId, quantity * 6) ;}

所有的操作都在一个事务中完成,这有任何一个操作慢都会影响整个事务的提交,并且还会延迟锁的占用时间。

优化后

public void placeOrderNew(Long productId, Long userId, int quantity) {  // ...}public class InventoryService {  @Transactional  public void decreaseStock(Long productId, Integer quantity) {    // ...  }}public class UserService {  @Transactional  public void updateUserPoints(Long userId, Integer points) {    // ...  }}

Spring全家桶实战案例源码
spring, springboot, springcloud 案例开发详解
 最新文章