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

news2024/10/5 17:18:29

外部配置源与外部配置文件及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配置,你可以通过任意配置源(如命令行参数、系统属性、环境变量等)方式配置一个名为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格式应该是没问题的。
在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/825947.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java环境搭建 Ubuntu Linux

jdk的安装和配置环境变量 使用apt sudo apt install default-jdk若是安装成功了在终端输入java -version来查看是否安装成功 使用官网下载的jdk包 直接在百度上搜索jdk&#xff0c;选择图片这个 网址:jdk下载网址 若是arm就选择带有arm的&#xff0c;反之选择x64的&#…

智能疏散照明控制系统在世博文化中心的应用

安科瑞 华楠 摘要:世博文化中心作为世博园区一轴四馆的核心建筑之一&#xff0c;其建筑面积大&#xff0c;人员密集&#xff0c;人流通道众多&#xff0c;疏散路径复杂。为了确保火灾发生时人员能安全、迅速的疏散&#xff0c;在电气设计中设置了一套智能疏散照明系统。通过介…

wps 预加载项插件本地开发启动项目打开wps 客户端,未看到加载项菜单,

wps 预加载项插件本地开发启动项目打开wps 客户端&#xff0c;未看到加载项菜单&#xff0c;请检查本地c盘安装目录下“jsplugins.xml”信息是否添加成功 如下图 name 插件项目 url 本地插件运行地址及端口 <jsplugins><jspluginonline name"wps-soft-copyright…

什么是软件检测证明材料,如何才能获得软件检测证明材料?

一、什么是软件检测证明材料 软件检测证明材料是指在软件开发和发布过程中&#xff0c;为了证明软件的质量和合法性&#xff0c;进行的一系列检测和测试的结果的集合。它是软件开发者和用户之间信任的桥梁&#xff0c;可以帮助用户了解软件的性能和安全性&#xff0c;让用户放…

docker 哨兵模式和集群模式安装Redis7.0.12

docker 哨兵模式和集群模式安装Redis7.0.12 1.下载镜像 1.1 配置阿里云加速源 墙外能访问https://hub.docker.com/_/redis 的可跳过 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors 登录后选择左侧的镜像工具>镜像加速器&#xff0c;获取加速器地址&#…

企业数字化转型的核心是什么?

如今&#xff0c;各行各业都在布局数字化转型&#xff0c;而对于中国传统制造业来说&#xff0c;数字化转型更是当务之急&#xff0c;但由于制造企业组织、业务、产品和价值链的复杂性&#xff0c;为数字化转型带来诸多障碍。这篇就来重点分享下&#xff0c;制造业如何做好数字…

传智教育院校邦首期图灵计划—黑马菁英班正式开班!

7月30日&#xff0c;大家期待已久的首期图灵计划——黑马菁英班正式开班&#xff01;班级开班的那一刻&#xff0c;同学们的学习热情立即被点燃&#xff01; 这个班级匹配当代大学生特点&#xff0c;在课程设置、讲师团队、班级管理等方面做到顶配&#xff0c;建立课程教学与人…

使用Logistic回归预测心脏病 -- 机器学习项目基础篇(4)

世界卫生组织估计&#xff0c;五分之四的心血管疾病&#xff08;CVD&#xff09;死亡是由于心脏病发作。本研究旨在精确确定有很好机会受CVD影响的患者的比例&#xff0c;并使用Logistic回归预测总体风险。 Logistic回归是一种统计和机器学习技术&#xff0c;基于输入字段的值对…

YOLOv8-pose姿态模型笔记1

YOLOv8-pose关键点模型输出&#xff0c;每个框输出51个信息&#xff0c;即17个关键点以及每个关键点的得分 COCO的annotation一共有17个关节点。 分别是&#xff1a;“nose”,“left_eye”, “right_eye”,“left_ear”, “right_ear”,“left_shoulder”, “right_shoulder”…

18款奔驰S320升级后排座椅加热功能,提升后排乘坐舒适性

奔驰座椅加热就简单多了&#xff0c;是在原车座椅海绵表面安装一层加热垫&#xff0c;加热垫里面是加热丝&#xff0c;通过电机热的原理&#xff0c;快速升温&#xff0c;把热量传递给车主。 奔驰的座椅加热系统是通过车门按键来控制&#xff0c;3档调节&#xff0c;温度从低到…

Michael.W基于Foundry精读Openzeppelin第18期——DoubleEndedQueue.sol

Michael.W基于Foundry精读Openzeppelin第18期——DoubleEndedQueue.sol 0. 版本0.1 DoubleEndedQueue.sol 1. 目标合约2. 代码精读2.1 结构体Bytes32Deque2.2 length(Bytes32Deque storage deque) && empty(Bytes32Deque storage deque)2.3 at(Bytes32Deque storage de…

【Java可执行命令】(十三)策略工具policytool:界面化创建、编辑和管理策略文件中的权限和配置 ~

Java可执行命令之policytool 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 使用方式3.2 使用技巧3.3 注意事项 4️⃣ 应用场景&#x1f33e; 总结 1️⃣ 概念 在Java平台上&#xff0c;安全性是至关重要的。为了提供细粒度的安全管理机制&#xff0c;Java引入了policytool命令。p…

LuckyFrameweb LuckyFrameClient 自动化测试平台 安装部署 使用教程

LuckyFrameweb 自动化测试平台 jdk安装 maven安装 LuckyFrameweb安装 仓库地址 使用maven 打包jar包 docker-compose安装mysql #cat mysql-start.yml version: "3" services:mysql:image: mysql:5.7restart: alwaysenvironment:- TZAsia/Shanghaiports:- 3306:3…

分享:交流负载箱 0~9.999A 可调 步进1mA

前言 最近去客户那边&#xff0c;发现一个问题&#xff0c;他们的交流供电单元 测试很不方便。 需求 供电单元输出&#xff1a; AC220V 50HZ&#xff1b;漏电保护保护功能过载报警功能&#xff1b;超载保护功能&#xff1b; 总而言之&#xff0c;他们需要一台 交流的电子负…

Unity 画线OnPopulateMesh函数VertexHelper

一个画图表&#xff08;折线图&#xff0c;树状图&#xff0c;饼状图&#xff0c;雷达图&#xff09;的插件。 底层使用UGUI中的重写了OnPopulateMesh这个方法&#xff0c; 用来实现鼠标画线的功能。 OnPopulateMesh(VertexHelper vh) {} using System; using System.Collec…

Elisp之buffer-substring-no-properties用法(二十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

冲突域 和 广播域

冲突域&#xff1a; 在传统的以粗同轴电缆为传输介质的以太网中&#xff0c;同一介质上的多个节点共享链路的带宽&#xff0c;争用链路的使用权&#xff0c;这样就会发生冲突&#xff0c;CSMA/CD机制中当冲突发生时&#xff0c;网络就要进行回退&#xff0c;这段回退的时间内链…

SpringBoot复习:(15)Spring容器的核心方法refresh是在哪里被调用的?

在SpringApplication的run方法&#xff1a; refreshContext代码如下&#xff1a; 其中调用的refresh方法代码如下&#xff1a; 其中调用的refresh方法代码如下&#xff1a; 其中调用的fresh方法代码如下&#xff1a; 其中调用了super.refresh();而这个super.refresh()就是…

AP5179 高端电流采样降压恒流驱动IC SOP8 LED车灯电源驱动

产品描述 AP5179是一款连续电感电流导通模式的降压恒流源&#xff0c;用于驱动一颗或多颗串联LED输入电压范围从 5 V 到 60V&#xff0c;输出电流 最大可达 2.0A 。根据不同的输入电压和外部器件&#xff0c; 可以驱动高达数十瓦的 LED。内置功率开关&#xff0c;采用高端电流…

AI赋能下的“数字人”与“数智人”:异同解析

由于人工智能技术的快速发展&#xff0c;我们逐渐进入了一个数字化的时代。在这个时代中&#xff0c;两个概念引起了广泛的关注和讨论&#xff0c;那就是“数字人”和“数智人”。虽然这两个概念都与人工智能有关&#xff0c;但它们在含义和应用上存在一些不同之处。在本文中&a…