gpt4 book ai didi

详解Spring Boot 配置加载顺序及属性加载顺序

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章详解Spring Boot 配置加载顺序及属性加载顺序由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

先给大家介绍下spring boot 配置加载顺序,具体内容如下所示:

使用 Spring Boot 会涉及到各种各样的配置,如开发、测试、线上就至少 3 套配置信息了。Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发、测试、线上环境使用不同的配置.

在 Spring Boot 里面,可以使用以下几种方式来加载配置。本章内容基于 Spring Boot 2.0 进行详解.

1、properties文件; 。

2、YAML文件; 。

3、系统环境变量; 。

4、命令行参数; 。

等等…… 。

我们可以在 Spring Beans 里面直接使用这些配置文件中加载的值,如:

1、使用 @Value 注解直接注入对应的值,这能获取到 Spring 中 Environment 的值; 。

2、使用 @ConfigurationProperties 注解把对应的值绑定到一个对象; 。

3、直接获取注入 Environment 进行获取; 。

配置属性的方式很多,Spring boot使用了一种独有的 PropertySource 可以很方便的覆盖属性的值.

配置属性加载的顺序如下:

1、开发者工具 `Devtools` 全局配置参数; 。

2、单元测试上的 `@TestPropertySource` 注解指定的参数; 。

3、单元测试上的 `@SpringBootTest` 注解指定的参数; 。

4、命令行指定的参数,如 `java -jar springboot.jar --name="Java技术栈"`; 。

5、命令行中的 `SPRING_APPLICATION_JSONJSON` 指定参数, 如 `java -Dspring.application.json='{"name":"Java技术栈"}' -jar springboot.jar` 。

6、`ServletConfig` 初始化参数; 。

7、`ServletContext` 初始化参数; 。

8、JNDI参数(如 `java:comp/env/spring.application.json`); 。

9、Java系统参数(来源:`System.getProperties()`); 。

10、操作系统环境变量参数; 。

11、`RandomValuePropertySource` 随机数,仅匹配:`ramdom.*`; 。

12、JAR包外面的配置文件参数(`application-{profile}.properties(YAML)`) 。

13、JAR包里面的配置文件参数(`application-{profile}.properties(YAML)`) 。

14、JAR包外面的配置文件参数(`application.properties(YAML)`) 。

15、JAR包里面的配置文件参数(`application.properties(YAML)`) 。

16、`@Configuration`配置文件上 `@PropertySource` 注解加载的参数; 。

17、默认参数(通过 `SpringApplication.setDefaultProperties` 指定); 。

数字小的优先级越高,即数字小的会覆盖数字大的参数值,我们来实践下,验证以上配置参数的加载顺序.

1、在主应用程序中添加 Java 系统参数.

?
1
2
3
4
5
6
@Bean
public CommandLineRunner commandLineRunner() {
   return (args) -> {
     System.setProperty( "name" , "javastack-system-properties" );
   };
}

2、在 application.properties 文件中添加属性.

?
1
name = javastack-application

3、在 application-dev.properties 文件中添加属性.

?
1
name = javastack-application-dev

4、添加测试类 。

?
1
2
3
4
5
6
7
8
9
10
11
@RunWith (SpringRunner. class )
@SpringBootTest (value = { "name=javastack-test" , "sex=1" })
@ActiveProfiles ( "dev" )
public class SpringBootBestPracticeApplicationTests {
   @Value ( "${name}" )
   private String name;
   @Test
   public void test() {
     System.out.println( "name is " + name);
   }
}

运行 test 单元测试,程序输出:

?
1
name is javastack-test

根据以上参数动态调整,发现参数会被正确被覆盖。了解了 Spring Boot 各种配置的加载顺序,如果配置被覆盖了我们就知道是什么问题了.

下面看下springboot属性加载顺序 。

优先级按照顺序由高到低,数字越小优先级越高 。

1.在命令行中传入的参数。类似于java -jar -Dspring.profiles.active之类。 2.SPRING_APPLICATION_JSON属性,该属性以JSON形式存储在系统环境变量中。 3.java:comp/env中JNDI属性。 4.Java的系统的属性,可通过System.getProperties()获得相关内容。 5.操作系统中的环境变量。 6.通过random.*配置的随机属性。 7.位于当前应用jar包外,针对不同{profile}环境的配置文件内容。 8.位于当前应用jar包内,针对不同{profile}环境的配置文件内容。 9.位于当前应用jar包外的application.properties或application.yml配置内容。 10.位于当前应用jar包内的application.properties或application.yml配置内容。 11.在@Configuration注解修改的类中,通过@PropertySource注解定义的属性。 12.应用默认属性,使用SpringApplication.setDefaultProperties定义的属性内容.

注:当发现自己使用springboot时,使用到的属性与自己希望得到的属性值由差异时,从以上加载顺序中去查看相关属性内容.

总结 。

以上所述是小编给大家介绍的Spring Boot 配置加载顺序及属性加载顺序,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。

原文链接:https://blog.csdn.net/youanyyou/article/details/82107780 。

最后此篇关于详解Spring Boot 配置加载顺序及属性加载顺序的文章就讲到这里了,如果你想了解更多关于详解Spring Boot 配置加载顺序及属性加载顺序的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com