application.properties 里面和 application.yml 里面都配置了同样的参数 ,哪个会生效

SpringBoot在加载配置时,application-dev.yml优先于application.properties,后者又优于application.yml。application-dev.yml中相同配置会覆盖其他文件中的,自定义配置类的优先级需视具体实现。未指定active:dev时,application-dev.yml配置无效。

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

在Spring Boot中,如果application.properties和application.yml,application-dev.yml(application.yml中指定了avtive: dev)中同时配置了相同的参数,Spring Boot默认会按照一定的加载顺序加载配置文件,并且后面的配置会覆盖前面的配置。

配置文件优先级 application-dev 高于application.properties 高于 application.yml,优先级低的先加载

具体来说:1. Spring Boot会先加载application.yml文件中的属性。2. 然后加载application.properties 文件中的属性。3 然后加载application-dev.yml 文件中的属性   因此,如果在application.properties和application.yml和application-dev.yml中都有相同的配置项,那么application-dev.yml中的配置将会覆盖application.properties中的同名配置项。值得注意的是,如果在同一个配置文件类型(properties或yml)中有重复的配置,也会遵循后加载的配置覆盖先前加载的配置的原则。同时,如果有@ConfigurationProperties或者@Bean等自定义配置类,其优先级又有所不同,具体还需结合Spring Boot的配置加载机制综合考量。

例如:application.properties和application.yml 同时存在

   例如: 三种同时存在

如果未指定 active: dev 则 application-dev.yml 中的配置不生效     path:null

### 将 Spring Boot 的 `application.properties` 转换为 `application.yml` 在 Spring Boot 项目中,可以将默认的 `application.properties` 文件替换为功能更强大的 `application.yml` 文件。以下是具体的方法以及需要注意的关键事项。 #### 方法 1. **移除原有的 `application.properties` 文件** 如果项目中有现有的 `application.properties` 文件,则需要将其删除以避免冲突[^1]。这是因为 `.properties` 文件具有较高的加载优先级,在两者共存的情况下可能会覆盖 `.yml` 文件中的配置。 2. **创建新的 `application.yml` 文件** 在项目的 `src/main/resources` 目录下新建一个名为 `application.yml` 的文件[^2]。此文件应遵循 YAML 的语法结构,注意缩进冒号后的空格。 3. **转换配置内容** - 原有的 `application.properties` 文件通常采用键值对的形式表示配置项。例如: ```properties server.port=9999 spring.datasource.url=jdbc:mysql://localhost:3306/testdb spring.datasource.username=root spring.datasource.password=secret ``` - 对应的 `application.yml` 文件则需按照嵌套层次结构书写: ```yaml server: port: 9999 spring: datasource: url: jdbc:mysql://localhost:3306/testdb username: root password: secret ``` 4. **清理构建缓存** 使用 Maven 或 Gradle 清理并重新构建项目,确保旧的 `application.properties` 不再存在于目标目录 (`target`) 下。这一步非常重要,因为它能防止残留的 `.properties` 文件干扰新配置生效。 5. **验证配置是否生效** 启动应用后检查指定端口或其他配置参数是否按预期工作。如果发现仍使用原默认值 (如端口 8080),可能是因为某些地方仍有遗留的 `.properties` 文件或路径错误[^3]。 #### 注意事项 - **YAML 缩进规则严格**:每一层都需要通过两个空格来进行区分,不可随意改变或者混用 Tab 键[^5]。 - **优先级问题处理**:当多个同名配置文件存在时,默认会先读取 `application.properties` 再尝试解析其他形式的资源文件。所以务必确认完全清除掉原始版本后再测试效果。 - **支持多环境配置管理**:利用 profile 功能可以在单个项目里维护不同运行环境下各自的独立设置集,比如开发模式下的调试信息展示程度不同于生产环境中更加严格的日志记录策略等[^4]。 ```java // 自定义加载特定位置的外部化配置示例代码片段 @SpringBootApplication public class DemoApplication { public static void main(String[] args) { new SpringApplicationBuilder(DemoApplication.class) .properties("spring.config.name=custom-config") // 修改默认名字 .properties("spring.config.additional-location=classpath:/config/") // 添加额外查找路径 .run(args); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值