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

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


配置文件:application.properties 、 application.yml 这些是配置文件,

配置源:命令行配置、环境变量配置、系统属性配置源,这些属于配置源。

在这里插入图片描述


外部配置源的作用:

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文件中通过<context-param…/>元素设置的初始化参数)。

(9)ServletConfig的初始化参数(在web.xml文件通过<init-param…/>元素设置的初始化参数或通过@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配置 ?

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

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

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


代码演示:

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

在这里插入图片描述


        //=============演示项目如何解析启动类这里配置的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格式应该是没问题的。

在这里插入图片描述


在这里插入图片描述


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在 VS Code 中配置 51 单片机环境,需要进行以下步骤: 1. 安装 C/C++ 扩展 在 VS Code 中搜索并安装 C/C++ 扩展,以便在代码编写时获得语法高亮、智能提示等功能。 2. 配置 c_cpp_properties.json 文件 在项目根目录下创建一个名为 c_cpp_properties.json 的文件,并按照以下格式进行配置: ``` { "configurations": [ { "name": "Win32", "includePath": [ "${workspaceFolder}/**", "C:/Keil_v5/ARM/INC" ], "defines": [], "compilerPath": "C:/Keil_v5/ARM/ARMCC/bin/armcc.exe", "cStandard": "c11", "cppStandard": "c++17", "intelliSenseMode": "${default}" } ], "version": 4 } ``` 其中,配置项的含义如下: - configurations:配置项数组。 - name:配置项名称。 - includePath:头文件搜索路径。 - defines:预处理器定义。 - compilerPath:编译器路径。 - cStandard:C 语言标准。 - cppStandard:C++ 标准。 - intelliSenseMode:IntelliSense 模式。 3. 配置 launch.json 文件 在项目根目录下创建一个名为 launch.json 的文件,并按照以下格式进行配置: ``` { "version": "0.2.0", "configurations": [ { "name": "Debug 51 MCU", "type": "cppdbg", "request": "launch", "program": "${workspaceFolder}/project_name", "args": [], "stopAtEntry": true, "cwd": "${workspaceFolder}", "environment": [], "externalConsole": false, "MIMode": "gdb", "miDebuggerPath": "C:/Keil_v5/ARM/ARMCC/bin/arm-none-eabi-gdb.exe", "setupCommands": [ { "description": "Enable pretty-printing for gdb", "text": "-enable-pretty-printing", "ignoreFailures": true } ] } ] } ``` 其中,配置项的含义如下: - name:配置项名称。 - type:调试器类型。 - request:请求类型。 - program:可执行文件路径。 - args:命令行参数。 - stopAtEntry:是否在程序入口处停止。 - cwd:工作目录。 - environment:环境变量。 - externalConsole:是否在外部控制台中运行。 - MIMode:GDB 后端模式。 - miDebuggerPath:GDB 路径。 - setupCommands:执行的命令。 配置完成后,就可以在 VS Code 中进行 51 单片机代码的编写、调试等操作了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_L_J_H_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值