全部学科
Python全栈
python
NodeJS全栈
nodejs
📝 1 篇文章 19 道配套习题

配置加载的底层规则和外部配置专题

专题说明

本专题深入剖析SpringBoot配置系统的底层架构,从配置优先级规则到Environment对象和PropertySource抽象,再到命令行参数、环境变量、配置文件加载顺序、Profile机制等,全面理解配置加载的核心原理。

学习目标

  1. 理解配置优先级完整规则
  2. 掌握Environment对象和PropertySource的作用
  3. 学会使用命令行参数和JVM参数覆盖配置
  4. 理解环境变量命名转换规则
  5. 掌握配置文件加载顺序和properties/yaml优先级
  6. 理解Profile特定配置的底层机制

学习内容

  • 配置优先级规则(17级优先级)
  • Environment对象与PropertySource抽象
  • 命令行参数覆盖(--key=value)
  • JVM系统属性(-Dkey=value)
  • 环境变量与命名转换
  • 配置文件加载顺序与位置
  • Profile特定配置机制
  • 随机值与占位符使用

学习建议

建议先理解配置优先级的完整规则,再学习Environment和PropertySource的底层抽象,然后掌握各种外部配置方式的使用,最后理解Profile机制。注意命令行参数优先级最高,环境变量命名转换规则为点号→下划线→全大写。

📝 配套习题(16 题)

💡 参考答案在文末
判断题
1

配置my.timeout=${custom.timeout:3000}中,冒号后的3000是默认值,当custom.timeout未配置时使用。这种说法正确吗?

A

B

单选题
2

Spring Boot默认会从以下哪个位置加载配置文件(优先级最高)?

A

项目根目录下的config子目录

B

项目根目录(与jar同级)

C

jar包内的classpath:/config/

D

jar包内的classpath根目录(/)

3

使用命令行参数覆盖Spring Boot配置时,以下哪种格式是正确的?

A

--server.port=8081

B

server.port=8081

C

-Dserver.port=8081

D

spring.server.port=8081

4

在Spring Boot配置加载优先级中,命令行参数的优先级与其他配置源相比如何?

A

命令行参数优先级最低

B

命令行参数优先级介于配置文件和系统属性之间

C

命行参数优先级最高,可以覆盖任何其他配置

D

命令行参数与系统属性优先级相同

5

若要通过环境变量设置Spring Boot的server.port属性,环境变量名应该写成什么格式?

A

SERVER_PORT

B

server.port

C

SERVER_PORT

D

SPRING_SERVER_PORT

6

Java系统属性(-D参数)与操作系统环境变量在配置加载中有什么区别?

A

系统属性优先级高于环境变量

B

环境变量优先级高于系统属性

C

两者优先级相同,后加载的覆盖先加载的

D

两者完全等效,无任何区别

7

配置server.port=${random.int[10000,20000]}的效果是什么?

A

生成10000到20000之间的随机端口,闭区间(包含边界值)

B

生成10000到20000之间的随机端口,开区间(不含边界值)

C

生成10000或20000这两个值之一

D

配置语法错误,无法解析

8

在Spring Boot配置文件中,使用随机值配置my.secret=${random.value},这会生成什么类型的值?

A

随机整数

B

随机UUID字符串

C

随机长整数

D

随机字节数组

9

如果在同一位置同时存在application.properties和application.yaml,Spring Boot会如何处理?

A

只加载application.properties,忽略yaml文件

B

只加载application.yaml,忽略properties文件

C

两者都会加载,yaml中的配置覆盖properties中的同名配置

D

两者都会加载,properties中的配置覆盖yaml中的同名配置

多选题
10

Spring Boot支持以下哪些配置文件格式和位置?

A

application.properties

B

application.yaml / application.yml

C

application-{profile}.properties/yaml

D

config/application.properties(外部config目录)

11

Profile配置的底层加载机制涉及以下哪些组件?

A

ConfigFileApplicationListener(配置文件加载监听器)

B

Environment对象(存储所有配置源)

C

@Profile注解(条件化Bean注册)

D

PropertySource(单个配置源抽象)

12

通过Spring Boot命令行参数,可以设置以下哪些内容?

A

应用配置属性(如server.port)

B

Spring Boot启动模式(如--debug)

C

主类参数(main方法接收的参数,不含--前缀)

D

JVM系统属性(如-Xmx512m)

13

使用操作系统环境变量配置Spring Boot应用有哪些优势?

A

跨平台兼容性好,Windows/Linux/macOS都支持

B

可以在不修改应用代码的情况下改变配置

C

适合容器化部署(Docker/K8s)场景

D

安全性比配置文件更高,不会意外提交到代码仓库

填空题
14

在Spring Boot应用中,可以通过注入 ____________ 接口来获取环境变量和系统属性,调用 ____________ 方法可以获取配置值,该方法会按照优先级从高到低依次查找各个PropertySource。

15

Profile特定配置文件的命名格式为 ________________________ ,其中{profile}替换为具体的Profile名称。当激活多个Profile时,按 ____________ 的优先级加载,后声明的Profile配置覆盖先声明的同名配置。

16

若要禁用命令行参数对配置的覆盖功能,可以通过SpringApplicationBuilder调用 ____________ 方法,或在SpringApplication上调用 ____________ 方法。禁用后,命令行参数将不会被添加到Environment中。

参考答案
1.正确 2.A 3.A 4.C 5.C 6.A 7.A 8.B 9.D 10.A;B;C;D 11.A;B;C;D 12.A;B;C 13.A;B;C;D 14.Environment;getProperty(String key 15.application-{profile}.properties;application-{profile}.yaml;声明顺序 16.setAddCommandLineProperties(false;setAddCommandLineProperties(false
想在手机上练习这套专题?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一个专题 自定义Starter开发专题
下一个专题 → 项目打包基础部署专题
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码