【Spring Boot学习笔记】配置文件的理解

2025-05-30 17:22:36  阅读 71 次 评论 0 条

刚才在研究公司的 Java 项目,发现 yml 配置有好多个,分别分为不同的场景,刚开始有点乱,Google了一圈,问了下 Gemini 和 GPT,简单的了解了一下

注:为保证项目的安全,本文的配置文件内容和名称均为自拟或比较普遍的名称

目前项目有几个关键的配置文件:

application.yml

application-test.yml

application-dev.yml

application-sms.yml

application-mail.yml

application-db-test.yml

application-db-dev.yml

主配置文件 application.yml 对于配置文件指定的内容大概是

server:
  port: 8848
# 应用名称
spring:
  application:
    name: admin-client
  profiles:
    active: test #开发环境
    include: sms,mail

解析:这个配置文件里面包含了对服务端口的指定与其他关联配置文件的指定

server.port=8848  #字面意思,就是这个服务监听的端口
spring.application.name=admin-client #这个就是这个项目的名称
spring.profiles.active=test #这个是指定要启动哪个关联配置文件
spring.profiles.include=sms,mail #这个是指定要引入的配置文件,无论何时都会加载的,如果application-test.yml包含这个属性,则会合并(注意,不是覆盖,是合并!)

application-test.yml里面长这样~(这个在 Spring Boot 2.3.x 以上这么做是会报错的!

spring:
  profiles:
    include: db-test  #这个很简单,这是引用了 application-db-test.yml这个文件,这个就是对应的数据库配置


那有比较聪明的同学就问了,如果是两个配置文件一样,就比如说这样

application.yml

server:
  port: 8848
# 应用名称
spring:
  application:
    name: admin-client

application-test.yml

spring:
  application:
    name: guest-client

那么,这个配置怎么算?

这涉及到 Spring Boot 配置加载的一个非常重要的概念:配置属性的合并与覆盖。

application.yml 中指定加载 application-test.yml 的时候,application.yml 中的内容并不会被忽略掉,反而会合并到一起,并且 application-test.yml 中的配置会优先于 application.yml

Spring Boot的配置加载规则

  1. application.yml 会始终被加载,因为这个是所有配置的基础

  2. application-{name}.yml 会在对应配置激活时被加载

  3. 如果存在相同的配置项,application-{name}.yml 会把 application.yml 中的这项配置覆盖掉

那么,这个配置最后就变成了

server:
  port: 8848
# 应用名称
spring:
  application:
    name: guest-client


拓展一下:

如何去取配置文件的内容

很简单,使用 @Value("${xxx.xxx}") 这个注解就可以啦~

就像酱紫~

@Value("${spring.application.name}")
private String appName;

这就给自动赋值好啦,直接用吧~~


微信扫码查看本文
本文地址:https://www.yangguangdream.com/?id=2250
版权声明:本文为原创文章,版权归 编辑君 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?