You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot多次调用Service触发StackOverflowError问题求助

解决方案:多次调用@Transactional服务方法导致Hibernate警告与StackOverflowError

可能原因

类级别标注@Transactional会让所有服务方法都被事务代理包裹,即使不需要事务的方法(比如simple())也会触发事务上下文的处理。在Spring Boot 2.2.4的旧版本中,这种全局事务代理可能和Hibernate的Session/ResultSet管理产生冲突,导致资源未正确释放,最终引发栈溢出。

解决步骤

1. 缩小事务范围,仅给需要事务的方法添加@Transactional

移除类级别的@Transactional,只在实际需要事务的方法上标注:

@Service
@Qualifier("purchaseService")
public class PurchaseServiceImpl implements PurchaseService {

    private OrderRepository orderRepository;

    @Autowired
    public PurchaseServiceImpl(OrderRepository orderRepository) {
        this.orderRepository = orderRepository;
    }
    
    @Override
    @Transactional // 仅在此方法添加事务
    public Order createOrder() {
        ...
        return new Order();
    }
    
    public String simple(){
        return "simple called !";
    }
    
    ...
    
}

2. 显式指定事务传播行为(可选)

如果必须保留类级别的事务,可给类指定默认传播行为为SUPPORTS,让不需要事务的方法仅在已有事务时才加入,同时给需要事务的方法强制指定REQUIRED:

@Service
@Transactional(propagation = Propagation.SUPPORTS)
@Qualifier("purchaseService")
public class PurchaseServiceImpl implements PurchaseService {

    // ...
    
    @Override
    @Transactional(propagation = Propagation.REQUIRED) // 强制开启事务
    public Order createOrder() {
        ...
    }
    
    public String simple(){
        return "simple called !";
    }
}

3. 升级Spring Boot版本

Spring Boot 2.2.4属于较旧版本,存在一些已知的事务与Hibernate交互的bug。建议升级到2.2.x分支的最新稳定版(如2.2.13.RELEASE),或直接升级到更高的稳定分支(如2.7.x),以修复底层框架问题。

4. 验证数据库连接池配置

检查application.properties或application.yml中的HikariCP连接池配置,确保连接释放规则正确:

# 示例配置,根据实际场景调整
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.connection-timeout=30000
spring.datasource.hikari.idle-timeout=600000
spring.datasource.hikari.max-lifetime=1800000

验证

修改后重新启动应用,多次调用接口测试,观察控制台是否还出现Hibernate警告及栈溢出异常。

内容的提问来源于stack exchange,提问作者Software Developer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:00:59