Spring Boot中@Value读取application.properties值返回null的解决方法
嘿,我看到你用@Value读取配置时遇到了全null的问题,咱们一步步来排查和解决:
核心问题排查与修复步骤:
配置文件名不匹配
Spring Boot默认只会自动加载application.properties文件,你的配置文件叫app.properties,这会导致Spring根本没读到这些配置。要么把文件名改成application.properties,要么在启动类中通过@PropertySource注解指定加载这个自定义配置文件(比如@PropertySource("classpath:app.properties"))。配置键名的空格问题
你的配置文件里键名和值之间有空格,比如JDBC_DRIVER =com.mysql.cj.jdbc.Driver,这里JDBC_DRIVER后面的空格会被Spring当成键名的一部分,实际键名变成了JDBC_DRIVER(带末尾空格),但你@Value里写的是${JDBC_DRIVER},自然匹配不到。必须把等号两边的空格去掉,修正后的配置如下:JDBC_DRIVER=com.mysql.cj.jdbc.Driver DB_URL=jdbc:mysql://127.0.0.1:3306/vetobooks?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC USER=root PASS=a变量名拼写错误
你的JDBCMysql类里,@Value("${JDBC_DRIVER}")对应的变量是public String JDBC_DRIVE;——少了一个字母R!应该改成JDBC_DRIVER,否则即使配置读对了,变量也接收不到值。未触发方法调用
你的主类里只是获取了JDBCMysql的Bean,但没有调用loadValue()方法,所以即使配置读取成功,你也看不到输出。需要在getBean之后调用这个方法:JDBCMysql jdbcMysql = context.getBean(JDBCMysql.class); jdbcMysql.loadValue();
修正后的完整代码示例:
1. 正确的application.properties
JDBC_DRIVER=com.mysql.cj.jdbc.Driver DB_URL=jdbc:mysql://127.0.0.1:3306/vetobooks?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC USER=root PASS=a
2. 修正后的JDBCMysql类
package com.example.java_spring_java_example; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class JDBCMysql { @Value("${JDBC_DRIVER}") public String JDBC_DRIVER; // 修正拼写错误 @Value("${USER}") public String USER; @Value("${PASS}") public String PASS; @Value("${DB_URL}") public String DB_URL; public void loadValue() { System.out.println(DB_URL + "-" + USER + "-" + PASS + "..."); } }
3. 修正后的主类
package com.example.java_spring_java_example; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; @SpringBootApplication public class main { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(main.class, args); JDBCMysql jdbcBean = context.getBean(JDBCMysql.class); jdbcBean.loadValue(); // 调用方法输出配置值 } }
按照这些步骤修改后,你应该就能正确读取到配置值了。
内容的提问来源于stack exchange,提问作者Napster89

