Spring Boot配置多数据源时integrationJdbcTemplate为null问题求解
问题产生原因
Spring的@Autowired注解仅支持对Spring容器管理的Bean的实例成员变量进行依赖注入,你代码里的integrationTemplate被static修饰,属于类级别的静态变量,类加载阶段就会完成初始化,此时Spring上下文还未完成初始化,也无法对静态变量完成注入,因此运行时取值为null。
而mainJdbcTemplate没有加static修饰,属于实例成员变量,因此可以被正常注入使用。
修复方案
方案1(最优,适配当前代码场景)
直接移除integrationTemplate的static修饰符即可:
@Autowired @Qualifier("integrationJdbcTemplate") private JdbcTemplate integrationTemplate;
因为SampleClass本身被@Component注解标注,属于Spring管理的Bean,实例化时会自动完成该成员变量的注入,且你的getDBData本身就是实例方法,完全不需要依赖静态变量访问该对象。
方案2(如果业务必须保留静态变量)
通过setter方法注入的方式给静态变量赋值:
private static JdbcTemplate integrationTemplate; @Autowired @Qualifier("integrationJdbcTemplate") public void setIntegrationTemplate(JdbcTemplate template) { SampleClass.integrationTemplate = template; }
Spring会在Bean实例化阶段调用该setter方法,把容器中对应的JdbcTemplate实例赋值给静态变量。
内容的提问来源于stack exchange,提问作者Coding world
相关产品推荐
相关产品推荐

