获取application.yml文件中配置参数的两个方法

本文介绍了两种在Spring Boot中获取application.yml配置参数的方法。第一种是使用`@Value`注解,适用于少量参数;第二种是通过`@ConfigurationProperties`创建实体类,适用于批量配置。步骤包括添加依赖、创建配置实体类并自动注入到控制器中,从而方便地使用配置参数。

application.yml文件内容
在这里插入图片描述

第一种(适用于获取少量配置参数):

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

第二种(适用于获取大批量配置参数):

第一步: 整合pom.xml文件

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>

第二步: 新建一个专门放置配置参数的实体类

注意 : @Component , @ConfigurationProperties(prefix = “man”) 不要忘记这两个注解; 其中prefix的值是配置文件中的一级名称一致

@Component
@ConfigurationProperties(prefix = "man")
public class User {
    private String name;
    private String age;
    private String sex;

    public String getName() {
        return name;
    }

    public String getAge() {
        return age;
    }

    public String getSex() {
        return sex;
    }

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

    public void setAge(String age) {
        this.age = age;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age='" + age + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}

第三步: 使用配置参数

因为在第二步中我们已经使用@Component注解把配置实体类交于spring容器管理;因此可以使用自动注入的方式直接获取

@RestController
@RequestMapping("/hello")
public class HelloWordController {

    @Autowired
    private User user;

    @GetMapping("/getUser")
    public void getUser(){
        System.out.println(user.toString());
    }
}

至此结束!!!

<think> 我们正在讨论Spring Boot项目中的配置文件。用户的问题是:配置文件方式是否只能写在application.yml文件中? 根据引用内容,我们知道Spring Boot支持多种配置文件格式,包括properties和yml(yaml)格式。而且配置文件可以有多个,包括主配置文件application.yml和环境特定的配置文件(如application-dev.yml, application-test.yml等)。 因此,回答要点: 1. Spring Boot支持多种配置文件,不仅限于application.yml,还包括application.properties,以及环境相关的配置文件。 2. 配置文件的位置:默认在resources目录下,但也可以通过spring.config.location指定外部配置。 3. 配置文件的优先级:Spring Boot有一个特定的配置文件加载顺序,例如,外部配置会覆盖内部配置,环境配置会覆盖主配置等。 此外,引用[4]提到了bootstrap.yml,这是Spring Cloud项目中使用的一个特殊配置文件,它比application.yml优先级更高,用于引导应用程序上下文。 因此,我们可以这样回答: - 不是只能写在application.yml中,还可以写在其他配置文件中,比如: - application.properties(properties格式) - 环境特定的配置文件(如application-dev.yml, application-test.yml) - bootstrap.yml(在Spring Cloud应用中) 同时,我们还需要说明配置文件的加载顺序和优先级。 根据Spring Boot官方文档,配置文件的加载顺序(从高到低): 1. 命令行参数 2. 来自java:comp/env的JNDI属性 3. Java系统属性(System.getProperties()) 4. 操作系统环境变量 5. RandomValuePropertySource配置的random.*属性 6. 外部配置文件(通过spring.config.location指定) 7. 内部配置文件(如application-{profile}.properties/yml) 8. 主应用程序内部的application.properties或application.yml(不带profile) 9. @Configuration注解类上的@PropertySource 10. 默认属性(通过SpringApplication.setDefaultProperties指定) 注意:内部配置文件(resources目录下的配置文件)也有优先级: - 先加载application.yml,再根据激活的profile加载application-{profile}.yml,后者的配置会覆盖前者的相同配置。 另外,如果同时存在application.properties和application.yml,那么properties文件的优先级高于yml(但在同一路径下,properties优先级高于yml,不过通常我们只使用一种格式)。 因此,总结:配置文件可以写在多个文件中,不仅仅是application.yml,而且这些配置文件可以同时存在,按照优先级合并。 最后,生成相关问题。 </think> 在 Spring Boot 项目中,配置文件**并非只能写在 `application.yml` 文件**中。根据您的引用内容,Spring Boot 支持多种配置文件形式和位置[^1][^3][^4]: --- ### 一、支持的配置文件类型与位置 | **配置文件类型** | **说明** | **示例** | |----------------------|-------------------------------------------------------------------------|----------------------------------| | **主配置文件** | | | | `application.yml` | 标准 YAML 格式配置文件(推荐) | `server.port: 8080` | | `application.yaml` | 与 `.yml` 功能相同(仅后缀名不同)[^1] | | | `application.properties` | Properties 格式配置文件 | `server.port=8080` | | **环境配置文件** | | | | `application-{env}.yml` | 环境专属配置(如 `application-dev.yml`)[^3] | `spring.datasource.url: jdbc:mysql://dev-db` | | `application-{env}.properties` | 同上 | | | **特殊配置文件** | | | | `bootstrap.yml` | Spring Cloud 专用(优先级高于 `application.yml`)[^4] | `spring.application.name: my-service` | | **外部配置文件** | | | | 命令行参数 | 启动时指定:`java -jar app.jar --server.port=9090` | | | 系统环境变量 | 如 `export SERVER_PORT=9090` | | | `config/` 目录文件 | 项目外部的 `/config/application.yml`(优先级高于内部配置) | | --- ### 二、配置文件加载优先级(从高到低) 1. **命令行参数**(`--key=value`) 2. **外部配置文件**(如 `/config/application.yml`) 3. **环境专属配置**(如 `application-dev.yml`)[^3] 4. **主配置文件**(`application.yml`) 5. **`@PropertySource` 注解** 6. **默认属性**(`SpringApplication.setDefaultProperties()`) > ✅ **示例**: > 若同时存在 `application.yml`(端口 8080)和 `application-dev.yml`(端口 9090), > 激活 dev 环境时实际端口为 **9090**(环境配置优先级更高)[^3]。 --- ### 三、如何激活不同环境配置? 在 `application.yml` 中指定激活的环境: ```yaml spring: profiles: active: dev # 激活dev环境的配置 ``` 启动时将通过命令行激活: ```bash java -jar app.jar --spring.profiles.active=test ``` --- ### 四、最佳实践建议 1. **基础配置** → 主配置文件 `application.yml` 2. **环境差异** → 拆分到 `application-dev.yml`/`application-prod.yml`[^3] 3. **云原生配置** → 使用 `bootstrap.yml`(如注册中心地址)[^4] 4. **敏感信息** → 通过环境变量或外部配置注入(避免硬编码) > 💡 提示: > 可通过 `spring.config.location` 指定自定义配置路径: > ```bash > java -jar app.jar --spring.config.location=classpath:/custom-config/ > ``` --- ### 相关问题 1. 如何在不同环境中自动切换数据库配置? 2. `bootstrap.yml` 和 `application.yml` 的区别是什么?[^4] 3. 如何加密配置文件中的敏感信息(如密码)? 4. 配置文件加载顺序的完整规则是怎样的? 5. 如何实现配置中心的动态刷新? [^1]: Spring Boot 支持 YAML 和 Properties 两种配置文件格式 [^2]: YAML 配置端口的示例写法 [^3]: 环境专属配置的加载机制 [^4]: `bootstrap.yml` 的特殊作用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微微一笑满城空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值