application.yml和application.properties和-dev加载和覆盖

springboot约定大于配置让我们省了很多心,但是很多约定我们却不是很确定

比如同时支持application.yml和application.properties那么谁配置为准呢?是怎样生效的呢?

同时配置的加载和覆盖问题

同时配置.yml和.properties的时候,是二者都生效,但是后面加载的会覆盖掉前面加载名称相同的属性,你可以理解为map,名称一样的被认定为是同一个配置,比如端口号。

这个规则不仅仅对application.yml和application.properties生效,对于衍生的application-dev.yml,application-dev.properties也生效

可以测试一下

同时有application的yml和properties文件和application-dev的yml和properties文件

端口依次为8101、8102、8103、8104

application两个配置里面都启用dev,spring.profiles.active=dev

最后结果是8104是application-dev.properties生效。
加载的顺序从
application->yml->properties->
application-dev->yml->properties,最后覆盖下来是8104.

迁移properties到yml文件

我不喜欢properties文件,原因无他,就是拿最常见的数据库配置,我要写四次spring.datasource,写的难受,读的也难受。

spring.datasource.driver=xxx
spring.datasource.url=jdbc:mysql://xxx
spring.datasource.username=xxx
spring.datasource.password=xxx

有人说你不会复制粘贴么?你先复制四个spring.datasource,然后再写配置?有些舍本逐末了,我本来就是配置项,我还先打个框架,你往里面填。。。

spring.datasource.xxx=xxx

但是旧的项目可能会使用properties的比较多,因为看习惯了,看yml总觉得没写对,会不会少了一个空格导致配置文件读取失败的问题,这个也难免,但是后面对于我们自己需要维护开发的本地环境,我们可以新增yml文件。

搭建yml配置

之前讲过了覆盖原理,其实我们很简单,

把application.properties中的spring.profiles.active=local改成我们的,比如我取个名字spring.profiles.active=qiushi

然后这个qiushi配置文件是没有properties文件的,所有就不用担心覆盖的问题。

新建application-qiushi.yml文件。
然后把之前启用的配置文件里面的配置移动过来就好了。

### 正确编辑应用Spring Boot `application.yml`配置文件 在IntelliJ IDEA中处理Spring Boot项目的`application.yml`配置文件涉及几个重要方面,包括确保IDE能够识别并提供自动补全支持以及正确设置多环境配置。 #### 设置资源目录以使IDE识别配置文件 如果发现IDE未能正确认识位于`src/main/resources/`下的`application.yml`文件,则需验证该目录已被标记为资源根目录。操作方法是在菜单栏选择`File->Project Structure->Modules`,接着定位到对应的模块,在右侧窗口内指定资源配置位置,并通过点击`Mark as -> Resources`来标注此路径[^4]。 #### 利用插件增强开发体验 为了提高编写YAML配置时的效率与准确性,建议安装名为“Spring Assistant”的插件。这一工具能够在创建或调整`application.yml`文档期间给予语法高亮显示、结构化视图切换及属性值智能推荐等功能的支持,从而显著提升工作效率,降低误输入的风险[^2]。 #### 处理多Profile场景下的配置优先级 针对拥有多个profile定义的情况——比如同时存在用于不同部署阶段(development, test, production)的特定设定——应当注意理解Spring框架解析这些配置项的原则。默认情况下,应用程序会加载全局范围内的基础配置加上由激活状态决定的具体环境补充部分;然而实际行为可能因项目内部实现差异而有所不同。例如,即使指定了prod作为活动概要(profile),但如果程序启动参数里包含了指向其他数据源的信息,那么最终生效的结果可能会偏离预期[^3]。 ```yaml # 示例:application.yml 中的部分内容展示如何区分不同的 profiles server: port: 8080 spring: profiles: active: dev # 或者 prod 等其它名称 --- spring: config: activate: on-profile: "dev" datasource: url: jdbc:mysql://localhost:3306/dev_db?useSSL=false&serverTimezone=UTC username: root_dev password: secret_dev --- spring: config: activate: on-profile: "prod" datasource: url: jdbc:mysql://remote.server.com:3306/prod_db?useSSL=true&serverTimezone=CET username: user_prod password: passwrod_prod_securely_stored_elsewhere ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值