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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

webrtc的回声消除延迟时间估算

叫回声消除的延迟时间估算不太合理&#xff0c;这里核心就是估算调用webrtc的条件边界&#xff0c;都知道webrtc回声消除的生效的前提就是一定要拿到远端声音的信息&#xff0c;然后拿近端声音和远端声音对齐&#xff0c;从近端声音中&#xff0c;结合远端声音模拟出远端声音在…

Windows用户如何安装新版本cpolar内网穿透超详细教程

Windows用户如何安装新版本cpolar内网穿透 文章目录 Windows用户如何安装新版本cpolar内网穿透 在科学技术高度发达的今天&#xff0c;我们身边充斥着各种电子产品&#xff0c;这些电子产品不仅为我们的工作带来极大的便利&#xff0c;也让生活变得丰富多彩。我们可以使用便携的…

[Python] Pylance 插件打开 Python 的类型检查

安装 Python 插件 2.打开一个 Python 文件 可以看到右下角有一个花括号和 Python 字样&#xff0c;点击花括号&#xff08;不是 Python 字样&#xff09;打开类型检查即可&#xff1a;

酷开系统 | 酷开科技,让数据变得更有价值!

身处信息时代&#xff0c;我们每个人时刻都在生成、传递和应用数据&#xff0c;数据已经成为了现代社会中宝贵的资源之一&#xff0c;而在人工智能领域&#xff0c;数据更是被称为人工智能的“燃料”。 而在AI的发展中&#xff0c;只有拥有高质量、多样性且充分代表性的数据集…

java 定时任务不按照规定时间执行

这里写目录标题 使用异步启动可能出现的问题排查代码中添加的定时任务步骤是否正确排查是否任务阻塞&#xff0c;如果定时任务出现异常阻塞后&#xff0c;将不会在次执行java中多个Scheduled定时器不执行为了让Scheduled效率更高&#xff0c;我们可以通过两种方法将定时任务变成…

vxworks文件系统分析

参考https://www.freebuf.com/articles/endpoint/335030.html 测试固件 https://service.tp-link.com.cn/detail_download_7989.html 固件提取 binwalk解压固件&#xff0c;在第一部分即为要分析的二进制文件&#xff0c;可以拖进ida分析 设置为arm小端字节序&#xff0c;点…

【HarmonyOS】性能优化之低代码开发加载多张轮播图

【关键字】 HarmonyOS、低代码开发、Swiper组件、性能优化、分页加载 写在前面 目前使用DevEco Studio的低代码工具开发元服务时&#xff0c;通过实际测试发现&#xff0c;Swiper组件加载多张轮播图时加载显示耗时较长&#xff08;实际测试网络状态一般的情况下显示耗时达到8…

ER系列路由器多网段划分设置指南

ER系列路由器多网段划分设置指南 - TP-LINK 服务支持 TP-LINK ER系列路由器支持划分多网段&#xff0c;可以针对不同的LAN接口划分网段&#xff0c;即每一个或多个LAN接口对应一个网段&#xff1b;也可以通过一个LAN接口与支持划分802.1Q VLAN的交换机进行对接&#xff0c;实现…

Stable Diffusion:网页版 体验 / AI 绘图

一、官网地址 Stable Diffusion Online 二、Stable Diffusion AI 能做什么 Stable Diffusion AI绘图是一种基于Stable Diffusion模型的生成式AI技术&#xff0c;能够生成各种类型的图像&#xff0c;包括数字艺术、照片增强和图像修复等。以下是一些可能的应用&#xff1a; …

怎么设置文件夹密码?文件夹密码设置方法合集

为文件夹设置密码可以有效地保护文件夹的数据安全&#xff0c;那么该怎么设置文件夹密码呢&#xff1f;下面我们来一起了解一下。 文件夹保护3000 想要简单快捷的为文件夹设置密码&#xff0c;那么&#xff0c;文件夹保护3000就是最佳的选择。它提供了3种文件夹保护方式&#…

IDEA项目实践——创建Java项目以及创建Maven项目案例、使用数据库连接池创建项目简介

系列文章目录 IDEA上面书写wordcount的Scala文件具体操作 IDEA创建项目的操作步骤以及在虚拟机里面创建Scala的项目简单介绍 目录 系列文章目录 前言 一 准备工作 1.1 安装Maven 1.1.1 Maven安装配置步骤 1.1.2 解压相关的软件包 1.1.3 Maven 配置环境变量 1.1.4 配…

vue2 el-carousel轮播图和文字一起改变

vue项目的话 安装一下element依赖 npm i element-ui -S在main入口文件引入element包 我在app文件里边去写的 <template><div class"w"><el-carousel height"460px"><el-carousel-item v-for"item in items" :key"i…

C++之观察者模式(发布-订阅)

目录 模式简介 介绍 优点 缺点 代码实现 场景说明 实现代码 运行结果 模式简介 观察者模式&#xff08;Observer Pattern&#xff09;&#xff0c;也叫我们熟知的发布-订阅模式。 它是一种行为型模式。 介绍 观察者模式主要关注的是对象的一对多的关系&#xff0c; …

C++ 哈希的应用【布隆过滤器】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f383;操作环境&#xff1a; Visual Studio 2022 版本 17.6.5 文章目录 &#x1f307;前言&#x1f3d9;️正文1、字符串比较2、布隆过滤器的概念3、布隆过滤器的实现3.1、基本结构3.2、插入…

实现邮箱管理之gmail邮箱、office365(Azure)邮箱之披荆斩棘问题一览

要进行Office365邮箱的授权对接&#xff0c;你需要先申请一个应用&#xff0c;并获取授权访问令牌。 以下是一个简单的步骤&#xff1a; 登录 Azure 门户&#xff1a;https://portal.azure.com/创建一个新的应用程序&#xff0c;或者使用现有的应用程序。要创建新的应用程序&…

SpringBoot引入MyBatisGenerator

1.引入插件 <plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.5</version><configuration><!--generator配置文件所在位置--><configuratio…

【CSS】3D卡片效果

效果 index.html <!DOCTYPE html> <html><head><title> Document </title><link type"text/css" rel"styleSheet" href"index.css" /></head><body><div class"card"><img…

Spring:IOC技术、Bean、DI

前言 Spring是一个开源的项目&#xff0c;并不是单单的一个技术&#xff0c;发展至今已形成一种开发生态圈。也就是说我们可以完全使用Spring技术完成整个项目的构建、设计与开发。Spring是一个基于IOC和AOP的架构多层j2ee系统的架构。 SpringFramework&#xff1a;Spring框架…

Jenkins Gerrit Trigger实践

1.创建Gerrit Trigger 2.jenkins master节点生成gerrit用户的密钥 这里的用户名得写登录gerrit后个人信息中的 Username 3.gerrit 配置刚刚jenkins生成密钥的公钥 4.gerrit 用户加入群组 不加这个群组&#xff0c;下一步测试就会报错“User aeshare has no capability conn…

TCP连接的状态详解以及故障排查(五)

同时打开 两个应用程序同时执行主动打开的情况是可能的&#xff0c;虽然发生的可能性较低。每一端都发送一个SYN,并传递给对方&#xff0c;且每一端都使用对端所知的端口作为本地端口。例如&#xff1a; 主机a中一应用程序使用7777作为本地端口&#xff0c;并连接到主机b 888…