SpringBoot注入NamedParameterJdbcTemplate为空抛空指针异常如何解决
问题排查与解决方案
SpringBoot 默认会在引入JDBC起步依赖、完成数据源配置后自动创建并注入NamedParameterJdbcTemplate实例,出现template为null的空指针异常,可按照以下优先级逐一排查:
- 优先排查是否手动实例化了@Repository类:如果在业务代码中通过
new关键字创建该Repository类的对象,Spring不会管理手动创建的实例,也就不会完成属性的自动注入,template自然为null。解决方法:删除手动new的逻辑,通过@Autowired/@Resource注入该Repository实例后再调用方法。 - 检查Repository类是否被Spring正确扫描识别:
- 确认类上已经添加了
@Repository注解,没有拼写错误 - 确认该类所在包在Spring的组件扫描路径下:如果类放在启动类所在包的外层,需要在启动类上添加
@ComponentScan(basePackages = "你的Repository所在包路径")指定扫描范围
- 确认类上已经添加了
- 检查依赖是否完整:确认项目中已经引入了
spring-boot-starter-jdbc起步依赖,以及对应数据库的驱动依赖(比如MySQL的mysql-connector-java),缺少JDBC起步依赖时Spring不会自动创建NamedParameterJdbcTemplate的默认实例。Maven依赖示例如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency>
- 检查注入变量的写法是否符合规范:
- 不要给
NamedParameterJdbcTemplate类型的成员变量添加static修饰,Spring不会为静态变量执行注入 - 确认
@Autowired注解的包路径为org.springframework.beans.factory.annotation.Autowired,没有引入其他同名注解
- 不要给
- 排查是否存在自定义配置覆盖了默认实例:如果你手动编写了Jdbc相关的自定义配置类,注释自定义配置后重试注入,排查自定义配置是否存在逻辑错误导致模板实例未正确创建。
内容的提问来源于stack exchange,提问作者Ali Ozdemir
相关产品推荐
相关产品推荐

