商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > SpringBoot读取application.yml作为配置的处理

SpringBoot读取application.yml作为配置的处理

  发布于2026-07-17 阅读(0)

扫一扫,手机访问

Spring Boot 最让人舒服的一点,就是它把“约定优于配置”和“配置外部化”这两个理念玩得明明白白。想想看,你不需要再纠结于繁杂的 XML 文件,也不用在代码里硬编码一堆参数——只要把配置丢进 application.ymlapplication.properties 里,Spring Boot 就会自动加载、注入到应用中。省心,也干净。

SpringBoot读取application.yml作为配置的处理

支持的格式有两种:.properties 键值对,和 .yml(YAML 格式)。后者层次清晰,读起来一目了然,所以更推荐。

那么 Spring Boot 到底从哪里找这个 application.yml?它会按下面的顺序依次扫描,后出现的文件会覆盖前面的配置:

  • 当前项目根目录下的 /config 子目录
  • 当前项目根目录下
  • classpath 下的 /config
  • classpath 根路径(也就是 src/main/resources/

日常开发中最常用的,当然是 src/main/resources/application.yml

基本用法:在代码中读取配置

第一种方式:使用 @Value,适合少量配置,简单直接。

# application.yml
app:
  name: MySpringBootApp
  version: 1.0.0
@Component
public class AppConfig {
    @Value("${app.name}")
    private String appName;
    @Value("${app.version}")
    private String version;
}

第二种方式:使用 @ConfigurationProperties,这是推荐的做法,尤其适合结构化配置——把整组配置映射到一个 Ja va Bean 里,清爽又好维护。

步骤 1:在 application.yml 中定义配置

# application.yml
database:
  host: 192.168.1.100
  port: 3307
  username: admin
  password: secret123

步骤 2:创建对应的配置类

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Component
@ConfigurationProperties(prefix = "database") // 对应 yml 中 database 开头的配置
public class DatabaseConfig {
    private String host = "localhost";
    private int port = 3306;
    private String username;
    private String password;

    // 必须有 getter/setter(或用 Lombok @Data)
    public String getHost() { return host; }
    public void setHost(String host) { this.host = host; }
    public int getPort() { return port; }
    public void setPort(int port) { this.port = port; }
    // ... 其他 setter/getter
}

步骤 3:在其他 Bean 中注入使用

@Service
public class UserService {
    private final DatabaseConfig dbConfig;

    public UserService(DatabaseConfig dbConfig) {
        this.dbConfig = dbConfig;
    }

    public void connect() {
        System.out.println("连接数据库: " + dbConfig.getHost() + ":" + dbConfig.getPort());
    }
}

支持复杂结构:嵌套对象、List、Map

真实的项目里,配置往往不止一层。嵌套对象、List、Map 都很常见。来看一个实际例子:

# application.yml
app:
  security:
    jwt:
      secret: mySecretKey
      expire-hours: 24
    cors:
      allowed-origins:
        - http://localhost:3000
        - https://myapp.com
@Component
@ConfigurationProperties(prefix = "app")
public class AppProperties {
    private Security security = new Security();

    public static class Security {
        private Jwt jwt = new Jwt();
        private Cors cors = new Cors();

        public static class Jwt {
            private String secret;
            private int expireHours;
            // getters/setters
        }

        public static class Cors {
            private List allowedOrigins = new ArrayList<>();
            // getter/setter
        }
        // getters/setters
    }
    // getter for security
}

启用 @ConfigurationProperties 的两种方式

第一种:直接在配置类上加 @Component,Spring Boot 会自动注册。简单省事。

@Component
@ConfigurationProperties(prefix = "xxx")
public class XxxProperties { ... }

第二种:在 @Configuration 类上使用 @EnableConfigurationProperties,显式指定要加载的配置类。

@Configuration
@EnableConfigurationProperties({DatabaseConfig.class, AppProperties.class})
public class AppConfig { }

需要提醒一下:两种方式不要同时用于同一个配置类,否则可能会创建多个实例,导致意料之外的行为。

总结

从最基本的 @Value 到结构化的 @ConfigurationProperties,再到嵌套对象和启用的细节,Spring Boot 的外部化配置机制其实并不复杂。关键是把规则理清楚,然后在实际项目中多尝试几次,很快就能得心应手。

本文转载于:https://www.jb51.net/program/3623752x0.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注