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

Spring Boot新手求助:如何读取resources下的application.properties?

在Spring Boot中读取application.properties的正确姿势

嗨,作为Spring Boot新手,其实完全不用自己手动写FileReader那套原生IO代码啦!Spring Boot已经帮我们封装好了一套简洁高效的配置读取机制,我给你分享几种最常用的方案:

方法一:用@Value快速读取单个属性

这是读取少量零散属性最直接的方式:

  1. 确保你的application.properties放在src/main/resources目录下(Spring Boot默认会自动加载这个文件),比如里面可以写:
app.name=MyFirstSpringApp
app.version=1.0.0
  1. 在你的Spring组件(比如@Service、@Controller、@Component或者@Configuration类)中直接注入属性:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class SimpleConfigReader {

    // 用@Value绑定配置文件中的key,${}里写属性名
    @Value("${app.name}")
    private String appName;

    @Value("${app.version}")
    private String appVersion;

    public void printAppInfo() {
        System.out.println("应用名称:" + appName);
        System.out.println("版本号:" + appVersion);
    }
}

Spring会自动帮你完成属性注入,不用手动处理文件加载和IO操作~

方法二:用@ConfigurationProperties批量绑定属性

如果你的配置项比较多,或者属于同一组相关配置,用这种方式更清晰:

  1. 先在application.properties中定义一组前缀相同的属性:
app.name=MyFirstSpringApp
app.version=1.0.0
app.author=Albin
app.max-connections=100
  1. 创建一个配置类,用@ConfigurationProperties指定属性前缀,绑定所有相关属性:
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "app") // 指定属性的统一前缀
public class AppConfigProperties {
    // 属性名要和配置文件中去掉前缀后的部分一致(支持驼峰转下划线,比如maxConnections对应max-connections)
    private String name;
    private String version;
    private String author;
    private Integer maxConnections;

    // 必须生成getter和setter方法,Spring通过setter注入属性值
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getVersion() {
        return version;
    }

    public void setVersion(String version) {
        this.version = version;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public Integer getMaxConnections() {
        return maxConnections;
    }

    public void setMaxConnections(Integer maxConnections) {
        this.maxConnections = maxConnections;
    }
}
  1. 在需要使用的地方注入这个配置类即可:
import org.springframework.stereotype.Service;

@Service
public class AppInfoService {

    private final AppConfigProperties appConfig;

    // 推荐用构造方法注入(比字段上的@Autowired更规范,也方便单元测试)
    public AppInfoService(AppConfigProperties appConfig) {
        this.appConfig = appConfig;
    }

    public void showFullAppInfo() {
        System.out.println("应用名称:" + appConfig.getName());
        System.out.println("版本:" + appConfig.getVersion());
        System.out.println("作者:" + appConfig.getAuthor());
        System.out.println("最大连接数:" + appConfig.getMaxConnections());
    }
}

方法三:用Environment接口动态读取属性

如果需要动态获取属性,或者不确定属性是否存在,Environment接口会很实用:

import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

@Component
public class DynamicConfigReader {

    private final Environment environment;

    public DynamicConfigReader(Environment environment) {
        this.environment = environment;
    }

    public void readConfig() {
        // 直接通过key获取属性
        String appName = environment.getProperty("app.name");
        // 可以指定默认值,当属性不存在时就用默认值
        String appDesc = environment.getProperty("app.desc", "这是一个Spring Boot应用");
        
        System.out.println(appName + " - " + appDesc);
    }
}

小提示

为什么不推荐你之前用的FileReader方式?因为Spring Boot的配置系统支持多环境配置(比如application-dev.properties、application-prod.properties)、命令行参数、环境变量等多种配置来源,手动读文件完全没法利用这些特性,还得自己处理文件路径、IO异常,太麻烦啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:19:20