SpringBoot文档之Externalized Configuration的阅读笔记

时间:2025-03-31 15:03:27

Externalized Configuration
SpringBoot应用可以从properties文件、yaml文件、环境变量、命令行参数中得到配置参数。

代码里可以使用注解@Value读取配置项的值。

配置项参数的加载顺序,后加载的属性,可以覆盖已加载的同名属性的值。

  • 默认配置,通过指定参数值。
  • 使用@PropertySource指定参数值的来源。
  • 配置文件,比如或者
  • 操作系统的环境变量。
  • Java的系统变量,即()
  • JNDI方式指定的属性。
  • ServletContext对象配置的参数。
  • ServletConfig对象配置的参数。
  • 使用SPRING_APPLICATION_JSON指定的JSON格式的属性,对应的命令行变量名为
    使用环境变量,样例如下:
    SPRING_APPLICATION_JSON='{"my":{"name":"test"}}' java -jar 
    
    • 1
    使用JVM的系统变量,样例如下:
    java -='{"my":{"name":"test"}}' -jar 
    
    • 1
    使用命令行参数,样例如下:
    java -jar  --='{"my":{"name":"test"}}'
    
    • 1
  • 命令行参数。
  • 使用@SpringBootTest指定的参数值。
  • 通过使用@DynamicPropertySource,在测试代码中指定参数。
  • 通过使用@TestPropertySource,在测试代码中指定参数。
  • 开发者工具,支持从$HOME/.config/spring-boot中加载配置参数。

加载配置文件的优先级:

  • Jar文件内的或者

  • Jar文件内的application-{profile}.properties或者application-{profile}.yaml

  • Jar文件外的或者

  • Jar文件外的application-{profile}.properties或者application-{profile}.yaml

    SpringBoot框架加载配置文件时,优先读取properties格式的同名配置文件。

    在启动类的main函数中增加如下代码,将显式禁用命令行参数

    SpringApplication.setAddCommandLineProperties(false);
    
    • 1

SpringBoot框架加载或者时,搜索路径如下:

  • 类路径,根路径。
  • 类路径,config包。
  • jar文件所在目录。
  • jar文件所在目录的子目录config
  • jar文件所在目录的子目录config下的子目录。

在命令行中增加参数,可以指定配置文件的名称。

java -jar  --=myproject
  • 1

使用上述样例启动应用程序,SpringBoot框架将搜索并加载配置文件或者

在命令行中增加参数,可以指定配置文件的搜索位置,样例如下:

java -jar  --=\
    optional:classpath:/,\
    optional:classpath:/
  • 1
  • 2
  • 3

在配置文件名增加前缀optional:,表示假如找不到该位置的配置文件,并不影响应用程序启动,不会导致应用程序启动失败。

-location的用途相同。

SpringBoot加载配置文件的方案,灵活、强大,可依据业务特点酌情使用,不要花费过多的时间。

EnvironmentPostProcessor允许在SpringBoot应用启动前修改Environment中定义的属性的值。

Java Config涉及如下注解:

  • @Value
  • @ConfigurationProperties
  • @Configuration
  • @EnableConfigurationProperties
  • @Validated
  • @Valid
  • @NotNull

需要结合样例、代码定义,深入理解上述注解的使用方法。