SpringBoot项目中@Value注入application.properties配置不生效导致dataSource创建失败
问题根因
你遇到的空指针异常是因为dataSource方法执行时,类上用@Value注入的四个属性全为null,传给Hikari配置时触发空指针。之所以@Value没注入成功,是你混用了三种数据源配置方式(@Value注入、@ConfigurationProperties绑定、方法入参DataSourceProperties),导致Bean初始化顺序异常,@Value还没完成注入就执行了Bean创建方法。
修复方案
方案1(推荐):删除冗余配置,用@ConfigurationProperties自动绑定
SpringBoot的@ConfigurationProperties会自动把spring.datasource前缀的配置项绑定到DataSource对象,不需要手动注入属性,修改配置类如下:
@Configuration public class SpringConfiguration { @Bean("dataSource") @ConfigurationProperties(prefix = "spring.datasource") public DataSource dataSource() { return DataSourceBuilder.create() .type(HikariDataSource.class) .build(); } @Bean public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){ SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(dataSource); return sqlSessionFactoryBean; } }
方案2:保留@Value的修复步骤
如果你一定要用@Value注入属性,按下面步骤修改:
- 删除
dataSource方法上的@ConfigurationProperties注解,删除方法入参的DataSourceProperties参数,避免配置方式冲突 - 确认启动类放在
com.ty包或父包下,如果启动类不在这个路径,需要在启动类上加@ComponentScan(basePackages = "com.ty")确保配置类被扫描到 - 确认
application.properties放在src/main/resources目录下,maven打包时没有被过滤掉
其他需要修正的问题
- pom文件中MyBatis版本过低:你当前使用的
mybatis-spring:1.2.3、mybatis:3.3.0适配的是Spring4.x版本,和SpringBoot 2.5.1使用的Spring5.x版本不兼容,建议升级到:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.13</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.1.1</version> </dependency>
application.properties中MongoDB配置错误:spring.data.mongodb.uri的值里是localhost:27017,你当前写的是localhost.27017,点要改成冒号。
内容的提问来源于stack exchange,提问作者climy007
相关产品推荐
相关产品推荐

