Spring Boot 属性配置解析

基于Spring Boot 3.1.0 系列文章

  1. Spring Boot 源码阅读初始化环境搭建
  2. Spring Boot 框架整体启动流程详解
  3. Spring Boot 系统初始化器详解
  4. Spring Boot 监听器详解
  5. Spring Boot banner详解

属性配置介绍

Spring Boot 3.1.0 支持的属性配置方式与2.x版本没有什么变动,按照以下的顺序处理,后面的配置将覆盖前面的配置:
1、SpringApplication.setDefaultProperties 指定的默认属性
2、@PropertySource注解配置
3、Jar包内部的application.properties 和 YAML 变量
4、Jar包内部的application-{profile}.properties 和 YAML 变量
5、Jar包外部的application.properties 和 YAML 变量
6、Jar包外部的application-{profile}.properties 和 YAML 变量
7、RandomValuePropertySource的随机值属性
8、操作系统环境变量
9、Java System属性 (System.getProperties())
10、JNDI属性
11、ServletContext 初始化参数
12、ServletConfig 初始化参数
13、嵌入在环境变量或系统属性中的SPRING_APPLICATION_JSON 的属性
14、命令行参数
15、测试环境properties 属性
16、测试环境的@TestPropertySource 注解
17、Devtools 全局配置

属性配置实验

使用前面的MyApplicationRunListener来读取Spring Boot 启动完成后的自定义配置,如下:

    public void started(ConfigurableApplicationContext context, Duration timeTaken) {
        System.out.println("上下文已刷新,应用程序已启动,但尚未调用CommandLineRunners和ApplicationRunners");
        System.out.println(context.getEnvironment().getProperty("me"));
    }

默认属性

Properties properties = new Properties();
properties.setProperty("me", "123456");
springApplication.setDefaultProperties(properties);
springApplication.run(args);

在这里插入图片描述

@PropertySource注解配置

创建一个app.yml文件,放置于resource目录下:

me: 333333

在SpringBootDemoApplication中标注,@PropertySource("classpath:app.yml")
在这里插入图片描述
运行后,此配置覆盖了“SpringApplication.setDefaultProperties 指定的默认属性”。
基于 @PropertySource注解的配置,需要刷新上下文后才能读取,因此需要在刷新之前就加载的配置如 logging.* and spring.main.* ,不适用。

Jar包内部的application.properties 和 YAML 变量

在resources内部的application.yml中定义

me: 4444

运行后覆盖之前的配置值
在这里插入图片描述

Jar包内部的application-{profile}.properties 和 YAML 变量

在resources内部的application-test.yml中定义

me: 55555

并在application.yml中定义

spring:
  profiles:
    active:
      - test

运行后覆盖之前的配置值
在这里插入图片描述

Jar包外部的application.properties 和 YAML 变量

在jar包所在目录,创建一个application.yml文件:

me: 666666

运行后覆盖之前的配置值
在这里插入图片描述

Jar包外部的application-{profile}.properties 和 YAML 变量

在jar 所在目录,创建一个application-test.yml文件:

me: 777777

运行后覆盖之前的配置值
在这里插入图片描述

RandomValuePropertySource的随机值属性

RandomValuePropertySource 会解析random.*开头的属性,返回一个随机值,如${random.int}返回一个随机整数
同样在前面的application-test.yml文件中配置:

me: ${random.int}

启动后,打印一个随机整数
在这里插入图片描述

操作系统环境变量

在操作系统中配置一个me变量,值为888888,启动后,即可读取到me的环境变量:
在这里插入图片描述

注意:操作系统环境变量要全局生效,否则会读取不到

Java System属性 (System.getProperties())

在这里,我们不再往JVM中设置新的属性,而是读取其原有的属性,如java.version
MyApplicationRunListener中,输出java.version

@Override
public void started(ConfigurableApplicationContext context, Duration timeTaken) {
    System.out.println("上下文已刷新,应用程序已启动,但尚未调用CommandLineRunners和ApplicationRunners");
    System.out.println(context.getEnvironment().getProperty("me"));
    System.out.println(context.getEnvironment().getProperty("java.version"));
}

为了能够体现后面的配置覆盖前面的配置,在application-test.yml中手动配置java.version

java:
  version: 1.8

运行后,打印的结果:
在这里插入图片描述

JNDI属性

这块用的很少,就忽略了,如果是同样的配置,该配置会覆盖前面的配置。

ServletContext 初始化参数

ServletConfig 初始化参数

如上两个都是servlet的配置,如server.port

嵌入在环境变量或系统属性中的SPRING_APPLICATION_JSON 的属性

在IDEA中配置启动时候的环境变量,SPRING_APPLICATION_JSON是一个JSON格式,如:
在这里插入图片描述
启动后,将打印:
在这里插入图片描述

命令行参数

同样的在IDEA中配置命令行参数,--me=10000
在这里插入图片描述
启动后打印结果如下,覆盖以前配置的值:
在这里插入图片描述

测试环境properties 属性

该配置是在单元测试中使用,如:

@SpringBootTest(properties = {"me=2000"})
class GatewayApplicationTests {

	@Autowired
	private Environment environment;

	@Test
	void contextLoads() {
		System.out.println(environment.getProperty("me"));
	}

}

启动后,将打印2000

测试环境的@TestPropertySource 注解

该配置是在单元测试中使用,如:

@TestPropertySource(properties = {"me=3000"})
@SpringBootTest(properties = {"me=2000"})
class SpringBootDemoTests {

	@Autowired
	private Environment environment;

	@Test
	void contextLoads() {
		System.out.println(environment.getProperty("me"));
	}

}

启动后打印3000
在这里插入图片描述

Devtools 全局配置

Devtools 是Spring Boot 提供的一套开发工具,启用需要依赖如下依赖:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-devtools</artifactId>
   <optional>true</optional>
</dependency>

默认读取$HOME/.config/spring-boot目录下的spring-boot-devtools.properties、spring-boot-devtools.yaml、spring-boot-devtools.yml文件,如果不存在,会从 $HOME 目录的根目录中搜索是否存在 .spring-bootdevtools.properties
如在.spring-bootdevtools.properties中配置:
在这里插入图片描述
启动后打印的结果如下,已为最新值:

在这里插入图片描述


作者其他要推荐的文章,欢迎来学习:
Prometheus 系列文章

  1. Prometheus 的介绍和安装
  2. 直观感受PromQL及其数据类型
  3. PromQL之选择器和运算符
  4. PromQL之函数
  5. Prometheus 告警机制介绍及命令解读
  6. Prometheus 告警模块配置深度解析
  7. Prometheus 配置身份认证
  8. Prometheus 动态拉取监控服务
  9. Prometheus 监控云Mysql和自建Mysql

Grafana 系列文章,版本:OOS v9.3.1

  1. Grafana 的介绍和安装
  2. Grafana监控大屏配置参数介绍(一)
  3. Grafana监控大屏配置参数介绍(二)
  4. Grafana监控大屏可视化图表
  5. Grafana 查询数据和转换数据
  6. Grafana 告警模块介绍
  7. Grafana 告警接入飞书通知

Spring Boot Admin 系列

  1. Spring Boot Admin 参考指南
  2. SpringBoot Admin服务离线、不显示健康信息的问题
  3. Spring Boot Admin2 @EnableAdminServer的加载
  4. Spring Boot Admin2 AdminServerAutoConfiguration详解
  5. Spring Boot Admin2 实例状态监控详解
  6. Spring Boot Admin2 自定义JVM监控通知
  7. Spring Boot Admin2 自定义异常监控
  8. Spring Boot Admin 监控指标接入Grafana可视化

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

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

相关文章

C#使用XML和Treeview结合实现复杂数据采集功能

一个项目的数据表暂时没有定下来&#xff0c;但是有了一些确定性&#xff1a;   1、比较复杂&#xff0c;可能变化&#xff1b;   2、大部分是选择项目&#xff0c;因为输入项目都差不多&#xff1b;   3、应用程序是C/S的窗体应用。   对于这样的用户需求&#xff0c;…

搭建个人hMailServer 邮件服务实现远程发送邮件

文章目录 1. 安装hMailServer2. 设置hMailServer3. 客户端安装添加账号4. 测试发送邮件5. 安装cpolar6. 创建公网地址7. 测试远程发送邮件8. 固定连接公网地址9. 测试固定远程地址发送邮件 转载自cpolar极点云文章&#xff1a;搭建个人hMailServer 邮件服务实现远程发送邮件 hM…

如何在编程中中实现负载均衡和容错处理

什么是容错 容错是指系统&#xff08;计算机、网络、云集群等&#xff09;在其一个或多个组件发生故障时继续运行而不会中断的能力。 创建容错系统的目的是防止由单点故障引起的中断&#xff0c;确保任务关键型应用程序或系统的高可用性和业务连续性。 容错系统使用备份组件…

【Twitter爬虫】Twitter网络爬虫

利用selenium爬取Twitter 从2月9日起&#xff0c;Twitter不再支持免费访问Twitter API&#xff0c;继续使用Twitter API支付较高的费用。下面将介绍一种绕过Twitter API爬取推文的方式 Selenium Webdriver框架 首先介绍一下Selenium Webdriver&#xff0c;这是一款web自动化…

计算机专业大学如何自学?常用网站和工具

耗时5小时&#xff0c;第一个B站视频&#xff0c;满足分享欲 计算机专业现状 or 困境&#xff1f;如何自学&#xff1f;常用网站科普&#xff01;_哔哩哔哩_bilibili &#x1f446;发了个视频&#xff0c;结合文章中的链接&#xff0c;保存到自己浏览器收藏夹里就完了 目录 …

React修改Antd组件的样式

修改默认的antd组件&#xff0c;需要使用global import React, { useState, useEffect } from react; import { Tabs, Rate, Steps } from antd; import styles from ./index.less;const Index (props) >{return (<div className{styles.class_steps}><Stepsprog…

maven 环境配置踩坑

今晚在跟着视频学习spring的时候&#xff0c;创建maven工程&#xff0c;一直提示Sync 下载异常。搞了一晚上终于搞定了环境。下面给出一下今晚的总结。 1、确保maven安装并配置好环境变量。 下载并安装maven后&#xff0c;还需要在电脑上配置maven的环境变量。这部分参考网络教…

Hyperledger Fabric网络快速启动

目录 1、网络服务配置 2、关联的docker-compose-base.yaml 各Peer节点容器设置如下信息。 3、被关联的Peer-base.yaml 4、启动网络 2、完成通道的创建 2.1将节点加入应用通道 更新锚节点 2.为什么要创建节点并将其加入应用通道中&#xff1f; 1、网络服务配置 由于要启动…

『赠书活动 | 第十三期』《算力经济:从超级计算到云计算》

&#x1f497;wei_shuo的个人主页 &#x1f4ab;wei_shuo的学习社区 &#x1f310;Hello World &#xff01; 『赠书活动 &#xff5c; 第十三期』 本期书籍&#xff1a;《算力经济&#xff1a;从超级计算到云计算》 赠书规则&#xff1a;评论区&#xff1a;点赞&#xff5c;收…

SFP6012-ASEMI代理MHCHXM(海矽美)二极管SFP6012

编辑&#xff1a;ll SFP6012-ASEMI代理MHCHXM&#xff08;海矽美&#xff09;二极管SFP6012 型号&#xff1a;SFP6012 品牌&#xff1a;MHCHXM&#xff08;海矽美&#xff09; 封装&#xff1a;TO-247AB 恢复时间&#xff1a;≤75ns 正向电流&#xff1a;30A 反向耐压&a…

基于Python的电影票房爬取与可视化系统的设计与实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

FlutterUnit 已上架 iOS,暗色模式全面支持

theme: cyanosis 一、FlutterUnit 的全平台支持 FlutterUnit 是我的一个开源项目&#xff0c;基于 Flutter 构建的一个 全平台 应用程序。现在很荣幸地宣布: FlutterUnit 已经上架 iOS 的 App Store &#xff0c;自此主流的几大平台均已提供体验。 项目地址: https://github.co…

Java中常见的线程池以及ThreadPoolTaskExecutor和ThreadPoolExecutor

线程池的基本组成&#xff1a; 线程管理器&#xff1a;用于创建并管理线程池&#xff0c;负责线程池的创建、销毁以及任务的添加。 工作线程&#xff1a;线程池中的线程&#xff0c;负责执行任务&#xff0c;没有任务时处于等待状态。 任务接口&#xff1a;每个任务必须实现的…

B051-cms06-退出 回车登录 登录拦截 记住我 SVN

目录 注销功能实现1.找到退出按钮修改请求路径2.后端删除Session并跳转到登录页面 回车登录功能登陆拦截1.编写登录拦截器2.配置拦截器 记住我后端实现页面实现 取消记住我后端实现页面实现 注销功能实现 1.找到退出按钮修改请求路径 header.jsp <% page language"j…

Linux上安装matlab

首先需要下载文件&#xff0c;微人大正版软件下载里有 然后直接点击&#xff0c;就可以就可以安装&#xff0c;不需要使用挂载命令&#xff0c;然后使用 ./install就可以进行安装了&#xff0c;这里记住是得登录自己的人大邮箱&#xff0c;否则无法激活&#xff0c;然后修改安…

LeetCode·每日一题·2490. 回环句·模拟

作者&#xff1a;小迅 链接&#xff1a;https://leetcode.cn/problems/circular-sentence/solutions/2325227/mo-ni-zhu-shi-chao-ji-xiang-xi-by-xun-ge-x65e/ 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 著作权归作者所有。商业转载请联系作者获得授权&#xff0…

MySQL 主从复制与读写分离

概念 主从复制与读写分离的意义 企业中的业务通常数据量都比较大&#xff0c;而单台数据库在数据存储、安全性和高并发方面都无法满足实际的需求&#xff0c;所以需要配置多台主从数据服务器&#xff0c;以实现主从复制&#xff0c;增加数据可靠性&#xff0c;读写分离&#x…

不是吧,交换机坏了你还只会这么排查?

又见面了&#xff0c;我的网工朋友 上次给你分享了交换机和路由器的对接上网配置案例&#xff0c;还记得吗&#xff1f; 今天这篇&#xff0c;和你聊聊交换机接口故障。 接口故障这件事&#xff0c;对咱们网工来说其实算是家常便饭了。 工作到现在&#xff0c;你复盘一下&a…

实战:求年月日时间前后遇到的坑和解决方式

这里写目录标题 前言正确实例&#xff1a;错误实例&#xff1a; 需求 前言 这周接到一个时间转换任务需要处理&#xff0c;本来没什么问题&#xff0c;后来完成后发现时间有偏差&#xff0c;又重写了一遍代码&#xff0c;感觉很有记录必要性&#xff0c;希望看过的小伙伴可以避…

计算机网络——数据链路层

序言 问&#xff1a;数据链路层在现在的社会起到什么作用&#xff1f; 答&#xff1a;数据链路层在现在的社会起到关键性作用&#xff0c;比如&#xff1a;数据传输和通信&#xff1b;网络连接和互联互通&#xff1b;错误检测和纠正&#xff1b;媒体访问控制&#xff1b;网络性…