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

Spring无法从application.properties获取值,求排查代码问题

问题原因与解决方案

核心原因

  1. 未加载配置文件:AnnotationConfigApplicationContext仅默认加载注解配置类(如@Configuration标注的ConfigBeans),不会自动读取application.properties,导致Spring无法识别${my.prop}占位符,直接输出原始字符串。
  2. 缺少占位符解析器:即使手动加载了配置文件,纯Spring环境下需要显式配置PropertySourcesPlaceholderConfigurer才能让@Value注解解析占位符(Spring Boot会自动配置此组件,但纯Spring上下文需要手动添加)。

修复方案

方案一:在纯Spring上下文环境中修复

修改ConfigBeans类,添加配置文件加载注解并配置占位符解析器:

@Configuration
@PropertySource("classpath:application.properties") // 加载application.properties
public class ConfigBeans {

    // 必须定义为static Bean,确保在其他Bean初始化前生效
    @Bean
    public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
        return new PropertySourcesPlaceholderConfigurer();
    }

    @Bean
    public MyClass myClass() {
        return new MyClass();
    }
}

方案二:改用Spring Boot标准启动方式(推荐)

如果是Spring Boot项目,直接使用SpringApplication.run启动,它会自动完成配置文件加载和占位符解析:

@SpringBootApplication
public class YourApplication {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(YourApplication.class, args);
        MyClass myBean = context.getBean(MyClass.class);
        myBean.printProp(); // 此时会输出testvalue
    }
}

确认MyClass的注解使用正确

确保@Value注解的语法无误:

public class MyClass {
    @Value("${my.prop}")
    private String prop;

    public void printProp() {
        System.out.println(prop);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 04:05:27