16、外部配置源与外部配置文件及JSON配置

外部配置源与外部配置文件及JSON配置

application.properties application.yml 这些是配置文件,
命令行配置、环境变量配置、系统属性配置源,这些属于配置源。

16、外部配置源与外部配置文件及JSON配置_第1张图片

外部配置源的作用:

Spring Boot相当于对Spring框架进行了封装,Spring Boot会自动配置大量的基础设置Bean(比如DataSource、SessionFactory等),此时就需要提供一些必要的配置信息(如URL、用户名、密码啊),这样Spring才能帮我们去自动配置。

▲ 配置源和配置文件

 配置源包含了配置文件,此外,配置源还包括如下:

- 环境变量
- 系统属性
- 命令行的选项参数
- JSON配置等

★ 外部配置源的加载顺序

▲ 加载顺序

(1)默认属性(通过SpringApplication.setDefaultProperties()方法指定)。
(2)配置类(@Configuration修饰的类)上的、用@PropertySource注解加载的属性文件中的属性值。
(3)配置文件(如application.properties文件等)。
(4)RandomValuePropertySource,只包含random.*中的属性。
(5)操作系统环境变量。
(6)Java系统属性(System的getProperties()方法返回的属性)。
(7)来自于 java:comp/env 的JNDI属性。
(8)ServletContext的初始化参数(在web.xml文件中通过元素设置的初始化参数)。
(9)ServletConfig的初始化参数(在web.xml文件通过元素设置的初始化参数或通过@Servlet注解设置的初始化参数)。
(10)来自SPRING_APPLICATION_JSON的属性(嵌套在环境变量或系统属性中JSON文本)
(11)命令行参数。
(12)测试用例类上通过@SpringBootTest注解的properties所指定的属性。
(13)测试用例类上通过@TestPropertySource注解加载的属性文件中的属性值。
(14)如果Spring Boot的devtools工具处于激活状态,用户Home目录中.config/spring-boot/子目录下spring-boot-devtools.properties或spring-boot-devtools.yml文件设置的属性。

▲优先级

因为后加载的配置属性,会覆盖先加载的配置属性,因此后加载的配置属性的优先级更高

测试配置 > 命令行参数 > JSON配置 > 系统属性 > 环境变量 > 随机配置 > 配置文件 > 配置类 > 默认属性

★ 配置文件的加载顺序

配置文件是Spring Boot外部配置源中最主流、最主要的配置源。

▲ 基本原则:

JAR包外临时指定的配置文件的优先级高于JAR包内配置文件的优先级;

特定Profile对应的配置文件的优先级高于通用配置文件的优先级

▲ 加载顺序

(1)JAR包内的application.properties(或application.yml)。
(2)JAR包内的application-{profile}.properties(或application-{profile}.yml),这是特定Profile对应的配置文件。
(3)JAR包外临时指定的application.properties(或application.yml)。
(4)JAR包外临时指定的application-{profile}.properties(或application-{profile}.yml)。

因为后加载的配置属性,会覆盖先加载的配置属性,因此后加载的配置属性的优先级更高

★ JSON配置

所谓JSON配置,你可以通过任意配置源(如命令行参数、系统属性、环境变量等)方式配置一个名为spring.application.json(环境变量用SPRING_APPLICATION_JSON变量名)的属性, 该属性的值是一个JSON文档,Spring Boot会自动解析该JSON文档,将其解析成对应的属性。

【注意:】JSON文档需要放在引号中,因此JSON文档的内容中双引号往往就需要转义。

▲ Spring Boot应用会自动解析JSON配置值,将该配置的属性值按JSON格式解析成多个属性值,传给Spring Boot应用

代码演示:
演示项目如何在启动类写Json格式,然后解析JSON格式的数据并赋值给springboot应用

16、外部配置源与外部配置文件及JSON配置_第2张图片

        //=============演示项目如何解析启动类这里配置的json数据===========================
        System.setProperty("spring.application.json",
                "{ \"user\" : {  \"name\":\"ljh\" , \"age\":25  ,  \"addrs\":[\"广州\",\"深圳\"]   }}"  );
        ConfigurableApplicationContext ctx =
                SpringApplication.run(BootApplication.class, args);

演示通过命令行配置Json格式的选项参数,再解析

这个是没有把启动类的json数据注释掉,如上面的数据,然后启动,发现在命令行设置json的数据可以被读取到。
但是如果我把启动类上的System.setProperty(“spring.application.json”,
“{ “user” : { “name”:“ljh” , “age”:25 , “addrs”:[“广州”,“深圳”] }}” ); 这个注释掉,再启动老是报age的错。
如图:不理解。JSON格式应该是没问题的。
在这里插入图片描述

16、外部配置源与外部配置文件及JSON配置_第3张图片

你可能感兴趣的:(springboot,json,spring,boot)