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

为什么在Spring Boot中无法读取application.properties配置文件的属性?

问题原因
  • 核心原因:Spring的@Value注解不支持直接注入静态类属性。Spring依赖注入基于实例对象完成,static修饰的属性属于类层级,不属于实例属性,因此不会被自动注入,默认值就是null。
  • 额外排查点:你写的配置文件名是application.peoprerties,存在拼写错误,正确的文件名应为application.properties,文件名错误会导致Spring无法读取配置项。
  • 包扫描验证:你的启动类NewsSiteApplication在site包下,PostDao在site.model子包下,@SpringBootApplication默认扫描当前包及所有子包的组件,包扫描逻辑没有问题。

注意:无论用哪种方案,都必须通过Spring容器获取PostDao实例,不要自行new PostDao()对象,自行实例化的对象不会触发Spring的属性注入逻辑。

解决方案

方案1:去掉static修饰(最简便)

如果业务场景不需要用静态变量访问这几个配置,直接删除static修饰符即可:

@Component
public class PostDao {
    @Value("${url}") public String DATABASE_URL;
    @Value("${user}") public String USER;
    @Value("${password}") public String PASSWORD;
}

使用的时候通过Spring注入的PostDao实例访问属性,不要直接用类名调用。

方案2:通过setter方法注入静态变量(需要保留static的场景)

把@Value注解加在非静态的setter方法上,在方法内给静态变量赋值:

@Component
public class PostDao {
    public static String DATABASE_URL;
    public static String USER;
    public static String PASSWORD;

    @Value("${url}")
    public void setDatabaseUrl(String url) {
        DATABASE_URL = url;
    }

    @Value("${user}")
    public void setUser(String user) {
        USER = user;
    }

    @Value("${password}")
    public void setPassword(String password) {
        PASSWORD = password;
    }
}

方案3:通过@PostConstruct初始化静态变量

先把配置注入到实例属性,Bean初始化完成后赋值给静态变量:

@Component
public class PostDao {
    public static String DATABASE_URL;
    public static String USER;
    public static String PASSWORD;

    @Value("${url}")
    private String databaseUrl;
    @Value("${user}")
    private String user;
    @Value("${password}")
    private String password;

    @PostConstruct
    public void initStaticConfig() {
        DATABASE_URL = this.databaseUrl;
        USER = this.user;
        PASSWORD = this.password;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:15:06