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

Spring Boot无法读取Properties文件配置值的问题求助

Spring Boot无法读取Properties文件配置值的问题求助

我在使用Spring Boot 3.4.1时遇到了一个棘手的问题:没法从配置文件里读取参数。一开始我用的是默认机制——把application.properties放在resources文件夹里,但没成功。后来我改成外部化配置文件的方式,代码如下:

@PropertySource("file:/home/user/myapp/myapp.properties")
@SpringBootApplication
public class MyApplication {
    public static void main(String... args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

看起来这个配置是有效的——因为如果我删除(或重命名)myapp.properties文件,启动应用时就会直接报错:
APPLICATION FAILED TO START Config data resource 'file [/home/user/myapp/myapp.properties]' via location 'file:///home/user/myapp/myapp.properties' does not exist

这说明Spring确实能找到这个配置文件,但我在组件里读取参数时却始终拿不到值。我的Controller代码是这样的:

@RestController
public class MyAppController {

    @Value("${staticRepo}")
    private String staticRepo;

    @GetMapping(value = "/api/myapp")
    List<Foo> getFoo() {
        if (staticRepo== null || staticRepo.trim().isEmpty()) {
            throw new InternalServerErrorException("MyApp is not configured properlly. Missing 'staticRepo' parameter in 'myapp.properties'");
        }
        return FooUtils.load(staticRepo);
    }
}

我反复检查了myapp.properties文件,里面确实有staticRepo参数(文件内容只有一行):

staticRepo=/home/user/myapp/repo/

我搜了好几个类似问题的帖子,但都没解决我的问题。其中一个帖子建议用命令行指定配置文件,我试了但还是没用:

java -jar /home/user/myapp/myapp.jar --spring.config.location=file:///home/user/myapp/myapp.properties

所以想问问大家:我到底哪里做错了?


编辑补充

按照网上的建议,我把变量名改成了repo,但问题依然存在。我也确认了@Value注解的包是org.springframework.beans.factory.annotation.Value,没有导错包。

而且这不是简化后的示例——除了修改了路径和应用名称,代码就是我贴出来的那样。为了彻底排查问题,我用VS Code(v1.96.2)的Spring Initializr Java Support(v0.11.2)向导从头生成了一个全新的应用。向导自动在/src/main/resources里创建了application.properties,里面默认有spring.application.name=demo这个配置,但我在代码里读取这个值时,输出的结果居然是null……

我的运行环境是Ubuntu 24.04.2 LTS,OpenJDK 21.0.6。新建的Demo项目代码如下:

@SpringBootApplication
public class DemoApplication {

    @Value("${spring.application.name}")
    private String name;

    public static void main(String[] args) {
        DemoApplication demo = new DemoApplication();
        System.out.println(demo.getName());

        SpringApplication.run(DemoApplication.class, args);
    }

    public String getName() {
        return name;
    }
}

备注:内容来源于stack exchange,提问作者Bob Rivers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 10:23:03