Externalized Configuration
-
Spring Boot允许您外部化您的配置,以便您可以在不同的环境中使用相同的应用程序代码。您可以使用各种外部配置源,包括Java属性文件、YAML文件、环境变量和命令行参数。
-
属性值可以通过使用@Value注释直接注入到bean中,通过Spring的环境抽象进行访问,或者通过@ConfigurationProperties绑定到结构化对象。
-
Spring Boot使用一个非常特殊的PropertySource顺序,旨在允许合理的值重写。以后的属性源可以覆盖在以前的属性源中定义的值。来源按下列顺序审议:参考官网地址
解释:
- 默认属性(通过设置SpringApplication.setDefaultProperties指定)。
- @PropertySource注释在你的@Configuration类上。请注意,在刷新应用程序上下文之前,不会将此类属性源添加到环境中。这对于配置某些属性(如日志记录)来说太晚了。*和spring.main。*在刷新开始前读取。
- 配置数据(如应用程序)。属性文件)。
- RandomValuePropertySource只具有random.*中的属性。
- 操作系统环境变量。
- Java系统属性(System. getproperties())。
- 来自java:comp/env的JNDI属性。
- ServletContext初始化参数。
- ServletConfig初始化参数。
- 来自SPRING_APPLICATION_JSON的属性(嵌入在环境变量或系统属性中的内联JSON)。
- 命令行参数。
- 属性。可以在@SpringBootTest和测试注释中获得,用于测试应用程序的特定部分。
- 测试中的@DynamicPropertySource注释。
- 测试上的@TestPropertySource注释。
- Devtools的全局设置属性在$HOME/。devtools处于活动状态时,配置/spring-boot目录。
配置数据文件按以下顺序考虑: - 打包在jar(应用程序)中的应用程序属性。属性和YAML变体)。(classpath:application.yml )
- 打包在jar中的特定于配置文件的应用程序属性(application-{profile})。属性和YAML变体)。classpath:config/application.yml
- 包中的jar(应用程序)之外的应用程序属性。属性和YAML变体)。(file :application.yml)
- 包中的jar之外的特定于配置文件的应用程序属性(application-{profile})。属性和YAML变体)。(file :config/application.yml )
重复就看优先级,优先级高覆盖优先级低的;
不重复则合并
案例
- 通过设置SpringApplication.setDefaultProperties指定
含义:有激活的环境就选择,没有激活的环境就选择自己设置的默认dev。
如果自己在yml中设置了该属性,因为yml的优先级比这个大,所以yml覆盖此处的设置。
如果自己在yml中没有设置该属性,此处的设置会起作用。
这些设置都是通过内部bean,有一个Environment对象,不是通过主启动类中的args。 - Java System
- 命令行参数
java –jar springboot.jar –-spring.profiles.active=pro
- 临时属性通过主启动类中args加载
- 使用jar命令启动SpringBoot工程时可以使用临时属性替换配置文件中的属性
- 临时属性添加方式:java –jar 工程名.jar –-属性名=值
- 多个临时属性之间使用空格分隔
- 临时属性必须是当前boot工程支持的属性,否则设置无效.
- 临时属性设置(开发环境)
带属性启动SpringBoot程序,为程序添加运行属性
通过编程形式带参数启动SpringBoot程序,为程序添加运行参数。args就是用来接收传过来的参数,和命令行参数一样也是通过主启动类中args加载。我们也可以不使用传过来的args,自己手动配置arg,达到同样的效果,这样的话就算通过外部传的参数也不加载,参数不起作用,因为使用的是arg,而不是args。
- 不携带参数启动SpringBoot程序(接收外部传的参数但是不携带参数启动)