2、外部化配置
在一个程序跑起来后,总是需要获取内部配置文件或者运行环境中的配置项,SpringBoot 应用允许把配置外置化,外部配置源优先级:java properties配置文件、yaml文件、环境配置文件、命令行参数【从前往后优先级越大,命令行最大】,就像 profile 文件打包后运行依旧能在运行时 通过 --配置文件配置项
修改需要修改的配置。
SpringBoot 应用可以直接获取当前运行环境中的环境变量信息和其他相关信息。
官网:https://docs.spring.io/spring-boot/docs/current/reference/html/features.html#features.external-config
配置文件优先级顺序【从官网翻译复制的】
Spring Boot 使用一种非常特殊的PropertySource
顺序,旨在允许明智地覆盖值。属性按以下顺序考虑(较低项目的值覆盖较早的项目):
- 默认属性(由设置指定
SpringApplication.setDefaultProperties
)。 @PropertySource
@Configuration
您的课程上的注释。请注意,Environment
在刷新应用程序上下文之前,不会将此类属性源添加到 中。配置某些属性(例如在刷新开始之前读取的logging.*
和)为时已晚。spring.main.*
- 配置数据(例如
application.properties
文件)。 - 仅在中
RandomValuePropertySource
具有属性的 A。random.*
- 操作系统环境变量。【OS environment】
- Java 系统属性 (
System.getProperties()
)。 - JNDI 属性来自
java:comp/env
. ServletContext
初始化参数。ServletConfig
初始化参数。- 来自
SPRING_APPLICATION_JSON
(嵌入在环境变量或系统属性中的内联 JSON)的属性。 - 命令行参数。
properties
属性在你的测试。可用于测试应用程序的特定部分@SpringBootTest
的测试注释。@TestPropertySource
测试上的注释。$HOME/.config/spring-boot
当 devtools 处于活动状态时,目录中的Devtools 全局设置属性。
常用的配置文件方式就是:.properties配置文件、.yaml配置文件,这些配置文件的优先级也是底下的比上面的高
配置数据文件按以下顺序考虑:
【也是底下的比上面的优先级高】
- 打包在 jar 中的应用程序属性
application.properties
(和 YAML 变体)。 - 打包在您的 jar(
application-{profile}.properties
和 YAML 变体)中的特定于配置文件的应用程序属性。 - 打包 jar(
application.properties
和 YAML 变体)之外的应用程序属性。 - 打包的 jar(
application-{profile}.properties
和 YAML 变体)之外的特定于配置文件的应用程序属性。
建议程序内使用一种格式的配置文件:优先考虑 .yaml 和 .properties
程序内的配置文件寻找路径:
当你在程序内使用了外部配置文件记录配置后,SpringBoot 将从这些地方寻找加载外部配置文件。越底下优先级越高。
- From the classpath
- The classpath root【maven 工程的resource目录下】
- The classpath
/config
package 【resource 目录里面名字叫 config 的目录里面】
- From the current directory
- The current directory 【或者只要你在当前程序同级目录下创建配置文件,一样能加载配置】
- The
/config
subdirectory in the current directory 【当前程序同级目录下建立一个 config 目录,里面加一个配置文件配置一样能生效】 - Immediate child directories of the
/config
subdirectory 【当前程序同级config目录的有一级子目录config里面加配置文件。】
还有如果这些方式都被别人用了但你还是需要更改配置,你可以先创建一个配置文件并写好配置,然后 通过 java -jar 当前程序jar包.jar --spring-config-name=自定义的配置文件名,这样你的配置就能被用到。(官网这么说的没试过)