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

SpringBoot结合JDBC实现JdbcTemplate懒加载遇阻求助

问题分析与解决方案

核心问题

你的serbMsSqlJdbcTemplate Bean定义中,直接调用semArbDataSource(serbDetails)方法创建数据源实例,这种写法绕过了Spring的Bean生命周期管理机制。Spring无法为直接实例化的对象生成懒加载代理,导致@Lazy注解完全失效——启动时就会执行semArbDataSource和serbMsSqlJdbcTemplate方法,立即初始化Bean。

修复步骤

1. 修改JdbcTemplate的Bean定义,通过依赖注入获取DataSource

将serbMsSqlJdbcTemplate的参数改为注入semArbDataSource,而非直接调用方法:

@Lazy
@RefreshScope
@Bean
public JdbcTemplate serbMsSqlJdbcTemplate(@Qualifier("semArbDataSource") DataSource semArbDataSource) {
    log.info("Hii 2");
    return new JdbcTemplate(semArbDataSource);
}

这样Spring会注入semArbDataSource的懒加载代理对象,只有当你第一次使用serbMsSqlJdbcTemplate时,才会触发数据源和JdbcTemplate的实际初始化。

2. 检查额外的初始化触发点

  • 如果StranDao被其他非懒加载的Bean依赖(比如启动时就加载的Service或Controller),即使JdbcTemplate是懒加载,也会提前触发初始化。可以给StranDao类添加@Lazy注解,或者梳理依赖链,确保没有启动时强制加载它的逻辑。
  • 测试时可以暂时移除@RefreshScope,先验证懒加载是否生效,确认后再重新添加——虽然Spring Boot 2.5.x中两者兼容,但某些场景下可能存在代理优先级冲突。

内容的提问来源于stack exchange,提问作者Image Literature

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:57:51