application.properties 切换到 application.yml

本文探讨了YML和Properties文件在Spring Boot项目中的使用与优先级问题。揭示了直接修改application.properties后缀为yml可能导致的问题及解决办法,包括执行maven清理安装和依赖配置。同时对比了两种配置方式的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

yml文件的好处,天然的树状结构。配置起来和使用起来比较方便。

但是你直接去修改 application.properties 后缀名  修改yml 你会发现你的代码跑不起来。

会报标签找不到的情况。

上网查完资料后发现 需要 先删除 application.properties 文件后,执行 maven -X clean install

执行maven -X clean install 吧

 

application.yml 和 application.properties 两个文件的优先级

application.properties > application.yml

如果你的项目中存在 application.properties 文件,
那么 application.yml 文件就只是一个摆设。

然后我们来看看他们两个的区别吧

application.properties

application.yml 

如果没有生效,请在 pom中添加一下配置

 

<dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
    <version>${snakeyaml.version}</version>
</dependency>

key后面的冒号,后面一定要跟一个空格 我被这个啃了一会儿。

<think>我们正在讨论SpringBootapplication.propertiesapplication.yml文件的使用问题。用户想知道这两个文件是否会冲突以及如何同时使用它们。根据引用[1]和[2],SpringBoot会按照固定的顺序加载配置文件,优先级从高到低。当同时存在application.propertiesapplication.yml时,它们都会被加载,但如果有相同的配置项,则优先级高的文件中的配置会覆盖优先级低的。具体顺序如下(从高到低):1.命令行参数2.项目根目录下的application.properties3.项目根目录下的application.yml4.classpath下的application.properties(即src/main/resources目录下的)5.classpath下的application.yml注意:同一优先级位置下,properties文件的优先级高于yml文件(根据引用[1]和[2]的说明,项目根目录下的properties优先级高于项目根目录下的yml,而classpath下的properties优先级高于classpath下的yml)。因此,如果两个文件同时存在,它们都会被加载,但相同配置项以优先级高的为准。也就是说,它们不会冲突,而是形成互补,后加载的会覆盖先加载的相同配置项。如何正确同时使用?1.可以将一些配置写在properties中,另一些写在yml中,只要没有重复的配置项,则两个文件的内容会合并。2.如果确实有相同的配置项,那么要注意优先级,优先级高的文件会覆盖优先级低的。所以需要根据你的需求决定哪个配置生效,然后将其放在优先级高的文件中。例如,假设我们在classpath下同时有application.propertiesapplication.yml:-application.properties:server.port=8080-application.yml:server:port:9090那么最终生效的是application.properties中的8080,因为classpath下的properties优先级高于yml。但是,如果我们有:-项目根目录下的application.yml(优先级高于classpath下的properties)中设置server.port=9090-classpath下的application.properties中设置server.port=8080则最终端口为9090。所以,同时使用这两个文件是完全可以的,只需要注意它们的加载顺序和覆盖规则。另外,根据引用[3]和[4],这两个文件都是SpringBoot的标准配置文件,可以配置各种属性。在实际项目中,我们通常根据团队习惯选择一种格式(yml更易读,特别是复杂结构;properties更简单直接)。如果同时使用,建议将主要配置放在一个文件中,而将一些需要覆盖的配置放在另一个优先级更高的文件中(比如通过外部化配置覆盖默认配置)。最后,引用[5]提到了动态配置的方案,但与本问题关联不大。总结:1.两个文件不会冲突,都会被加载。2.相同配置项按优先级覆盖:命令行参数>项目根目录properties>项目根目录yml>classpathproperties>classpathyml。3.不同配置项会合并。</think>### Spring Boot中application.propertiesapplication.yml的共存机制 在Spring Boot项目中,`application.properties`和`application.yml`可以同时存在且**不会产生冲突**,但它们的加载顺序决定了配置项的最终生效值。以下是关键机制: #### 1. **配置文件的加载顺序**(优先级从高到低) Spring Boot按固定顺序加载配置[^1][^2]: ```mermaid graph TD A[命令行参数] --> B[项目根目录application.properties] B --> C[项目根目录application.yml] C --> D[classpath下的application.properties] D --> E[classpath下的application.yml] ``` #### 2. **覆盖规则** - **相同配置项**:后加载的文件会覆盖先加载的文件中的相同配置项 - **不同配置项**:所有配置项会合并生效 例如: ```properties # application.properties server.port=8080 spring.datasource.url=jdbc:mysql://localhost:3306/db1 ``` ```yaml # application.yml server: port: 9090 # 覆盖.properties中的端口 logging: level: root: INFO # 新增配置 ``` 最终生效配置: - `server.port=9090`(yml覆盖properties) - `spring.datasource.url`保留properties的值 - 新增`logging.level.root=INFO` #### 3. **调试查看加载顺序** 可通过启动日志验证加载过程[^2]: ``` DEBUG o.s.b.c.c.ConfigFileApplicationListener - Loaded config file 'file:.../application.properties' Loaded config file 'file:.../application.yml' ``` #### 4. **最佳实践建议** 1. **主配置文件选择**: - 推荐使用`application.yml`管理**结构化配置**(如嵌套属性) ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/mydb username: admin ``` 2. **环境特定配置**: - 用`application-{profile}.properties`覆盖通用配置 ```properties # application-prod.properties server.port=8443 ``` 3. **敏感信息分离**: - 将密码等敏感数据放在`.properties`中(配合.gitignore) ```properties # secret.properties spring.datasource.password=${DB_PASSWORD} ``` 4. **避免覆盖冲突**: - 相同配置项只在一个文件中定义 - 使用`spring.config.import`显式导入[^4] ```yaml spring: config: import: classpath:secret.properties ``` #### 5. **动态配置更新** 通过`@RefreshScope`实现配置热更新[^5]: ```java @RefreshScope @RestController public class ConfigController { @Value("${server.port}") private String port; // 配置变更自动刷新 } ``` > **关键结论**:二者可共存,`.properties`优先级高于同路径的`.yml`[^1][^2]。建议用`.yml`管理主体配置,`.properties`处理环境覆盖或敏感数据。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值