Spring Boot 属性配置解析

news2024/11/16 7:19:49

基于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可视化

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

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

相关文章

充电桩计量装置TK4800充电机(桩)现场校验仪检定装置

支持同时开展直流充电机现场校验仪和交流充电桩现场校验仪的检定工作&#xff0c;提高检定效率。 专用检定枪线&#xff1a;配有国标直流充电枪线及国标交流充电枪线&#xff0c;可直接接至交直流充电桩&#xff08;机&#xff09;现场校验仪开展检定工作&#xff0c;无需额外…

JMeter从数据库中获取数据并作为变量使用

目录 前言 1、JMeter连接MySQL数据库 2、线程组下新建一个 JDBC Connection Configuration 配置元件 3、实现数据库的查询-单值引用 4、实现数据库的查询-多值引用 总结&#xff1a; 前言 JMeter如何从数据库中获取数据并作为变量使用&#xff1f;这在我们使用JMeter做接…

企业转型在搭建BI时,需要注意什么

如今&#xff0c;商业智能BI在全世界范围内掀起了一股热潮&#xff0c;形成了一个庞大的市场&#xff0c;在信息化时代&#xff0c;企业需要借助BI来进行更好的成长。 在这种全新的社会、商业BI环境下&#xff0c;各行各业的企业都开始寻求探索新的商业模式&#xff0c;通过转…

Vue基本概念、vue-cli和插值表达式的快速使用

一、vue基本概念 &#xff08;一&#xff09;vue介绍 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式javascript框架。 1. 渐进式的概念 渐进式&#xff1a;逐渐增强&#xff0c;可以在项目中使用vue的一部分功能&#xff0c;也可以使用vue的全…

网络安全实战植入后门程序

在 VMware 上建立两个虚拟机&#xff1a;win7 和 kali。 Kali&#xff1a;它是 Linux 发行版的操作系统&#xff0c;它拥有超过 300 个渗透测试工具&#xff0c;就不用自己再去找安装包&#xff0c;去安装到我们自己的电脑上了&#xff0c;毕竟自己从网上找到&#xff0c;也不…

GitHub 上“千金难求”!啃完这两本书,Spring在你面前便没有秘密

前言 Spring对Java程序员的重要性相信懂的都懂&#xff0c;夸张点甚至可以说是Spring成就了Java。 为什么说要啃这两本书。前者告诉你怎么用Spring&#xff0c;后者给你简单展示如何用的同时&#xff0c;还告诉你Spring是怎么实现的两者一起&#xff0c;让你知其然并知其所以…

在字节打酱油6年,被淘汰?太真实了...

涛子哥普通本科计算机专业毕业&#xff0c;目前在字节&#xff0c;部门是视频云中台。现在比较稳定&#xff0c;生活也算美满&#xff0c;算是个资深的打酱油高手&#xff0c;在字节也有6、7年左右的划水经验了。 刚好划水的时候在某乎上看到了一个问题&#xff1a;“软件测试会…

2023年Q1天猫电脑品类数据分析(含笔记本、游戏本、平板电脑)

目前&#xff0c;PC市场中正经历新旧产品的换代&#xff0c;在各行业消费复苏的背景下&#xff0c;PC市场的整体市场需求也有回暖的可能。结合鲸参谋平台上第一季度的销售数据&#xff0c;我们一起来看一看电脑市场当前的销售表现如何&#xff01; 笔记本电脑 尽管人们的消费需…

SPI FLASH Fatfs文件系统移植

一.FATFS文件系统简介 FATFS是面向小型嵌入式系统的FAT文件系统。他由C语言编写并且独立与底层I/O介质。支持的内核有&#xff1a;8051,PLC,ARV&#xff0c;ARM等。FATFS支持FAT12,FAT16,FAT32等文件系统格式。 官网链接 二.FATFS源码文件结构 diskio.c:包含底层存储介质的操…

linux搭建hadoop集群

linux搭建hadoop集群 1、创建4台虚拟机2、修改主机名3、配置网络4、配置hosts文件5、分配本地网络给虚拟机6、下载jdk&#xff0c;hadoop压缩包7、用xftp传输到虚拟机8、配置jdk9、配置hadoop10、创建脚本shell脚本&#xff0c;方便同步数据11、配置ssh免密登录12、同步jdk和ha…

希尔贝壳参与构建可信人工智能数据空间,助力大模型行业应用落地

2023年5月30日&#xff0c;由中国信息通信研究院、浙江省经济和信息化厅、杭州市人民政府、中国人工智能产业发展联盟主办的杭州通用人工智能发展论坛在未来科技城圆满落幕。本次会议以“大模型应用机遇和挑战”为主题&#xff0c;众多产学研代表现场参会&#xff0c;共同探讨人…

什么是可以文言文字翻译的呢?

大家有没有在日常生活中需要翻译自己不熟的外语呢&#xff1f;有没有觉得使用翻译软件的时候很轻松呢&#xff1f;你们知道文本翻译这个操作吗&#xff1f;它是一项很实用和创新的技术&#xff0c;可以将一种语言自动翻译转换为另一种语言&#xff0c;当然这些一般都是使用计算…

YOLOv5-7.0添加解耦头

Decoupled Head Decoupled Head是由YOLOX提出的用来替代YOLO Head&#xff0c;可以用来提升目标检测的精度。那么为什么解耦头可以提升检测效果呢&#xff1f; 在阅读YOLOX论文时&#xff0c;找到了两篇引用的论文&#xff0c;并加以阅读。 第一篇文献是Song等人在CVPR2020发表…

根据实体excel导入导出百万数据,可修改表头名称

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 表格导入导出实现效果展示根据实体类导出模板读取表格数据导出数据为excel进阶&#xff1a;修改表格导出的列头 controller示例工具类测试实体实体注解maven依赖 表…

基于SpringBoot+微信小程序的医院预约叫号小程序

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 该项目是基于uniappWe…

加密软件VMProtect教程:使用Windows、Net 、UNIX 秘钥生成器

VMProtect是新一代软件保护实用程序。VMProtect支持德尔菲、Borland C Builder、Visual C/C、Visual Basic&#xff08;本机&#xff09;、Virtual Pascal和XCode编译器。 同时&#xff0c;VMProtect有一个内置的反汇编程序&#xff0c;可以与Windows和Mac OS X可执行文件一起…

VMware虚拟机和主机传输文件

原文链接 虚拟机为Linux系统 使用vm-tools即可。 卸载旧工具&#xff1a; vmware-uninstall-tools.pl安装新工具&#xff1a; apt-get install open-vm-tools-desktop重启系统&#xff1a; reboot此时可以使用CtrlC、CtrlV的方式在主机和Linux虚拟机之间传输文件。 虚拟…

【网络原理】TCP协议如何实现可靠传输(确认应答机制)

&#x1f94a;作者&#xff1a;一只爱打拳的程序猿&#xff0c;Java领域新星创作者&#xff0c;CSDN、阿里云社区优质创作者。 &#x1f93c;专栏收录于&#xff1a;计算机网络原理 本篇主要讲解&#xff1a;TCP协议段格式&#xff0c;TCP的序列号&#xff0c;SYN、ACK标志位&a…

操作系统(王道)

1.1_1_操作系统概念 裸机&#xff08;硬件只听得懂二进制指令&#xff09;——>操作系统&#xff08;属于软件&#xff0c;提供良好交互界面&#xff09;——>应用软件——>用户使用 操作系统是指控制和管理整个计算机系统的硬件和软件资源&#xff0c;并合理地组织…

Python技术自学的方式

Python是一种高级编程语言&#xff0c;被广泛用于软件开发、数据分析、人工智能和科学计算等领域。它于1991年由Guido van Rossum创建&#xff0c;并且其简洁、易读的语法以及丰富的标准库使得它成为了初学者和专业开发人员的首选语言之一。 一、Python技术介绍 学习Python技术…