SpringBoot篇(运维实用篇 - 临时属性)

目录

一、临时属性设置

1. 简介

2. 属性加载优先级

那是否还有其他的配置方式呢?

3. 知识小结

二、开发环境中使用临时属性

1. 如何操作

2. 知识小结

3. 思考

三、配置文件分类

1. 简介

2. 4个级别

3. 为什么设计多种配置文件?

一个典型的应用

级别1和2什么时候使用呢?

4. 知识小结

四、自定义配置文件

1. 代码位置

2. 如何自定义配置文件

3. 自定义配置文件

3.1. 两种方式

方式一:使用临时属性设置配置文件名

方式二:使用临时属性设置配置文件路径

3.2 可以设置加载多个配置文件

3.3 温馨提示

3.4 知识小结


一、临时属性设置

1. 简介

目前我们的程序包打好了,可以发布了。

但是程序包打好以后,里面的配置都已经是固定的了,比如配置了服务器的端口是8080。

如果我要启动项目,发现当前我的服务器上已经有应用启动起来并且占用了8080端口,这个时候就尴尬了。

难道要重新把打包好的程序修改一下吗?比如我要把打包好的程序启动端口改成80。

SpringBoot提供了灵活的配置方式,如果你发现你的项目中有个别属性需要重新配置,可以使用临时属性的方式

快速修改某些配置。

方法也特别简单,在启动的时候添加上对应参数就可以了。

java –jar springboot.jar --server.port=80

上面的命令是启动SpringBoot程序包的命令,在命令输入完毕后,空一格,然后输入两个-号。

下面按照属性名=属性值的形式添加对应参数就可以了。

记得,这里的格式不是yaml中的书写格式,当属性存在多级名称时,中间使用点分隔,和properties文件中的属

性格式完全相同。

如果你发现要修改的属性不止一个,可以按照上述格式继续写,属性与属性之间使用空格分隔。

java –jar springboot.jar --server.port=80 --logging.level.root=debug

2. 属性加载优先级

现在我们的程序配置受两个地方控制了,第一配置文件,第二临时属性。

并且我们发现临时属性的加载优先级要高于配置文件的。

那是否还有其他的配置方式呢?

其实是有的,而且还不少,打开官方文档中对应的内容,就可以查看配置读取的优先顺序。

地址奉上:

https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config

我们可以看到,居然有14种配置的位置,而我们现在使用的是这里面的2个。

第3条Config data说的就是使用配置文件,第11条Command line arguments说的就是使用命令行临时参数。

而这14种配置的顺序就是SpringBoot加载配置的顺序,言外之意,命令行临时属性比配置文件的加载优先级高,

所以这个列表上面的优先级低,下面的优先级高。

其实这个东西不用背的,你就记得一点,你最终要什么效果,你自己是知道的,不管这个顺序是怎么个高低排

序,开发时一定要配置成你要的顺序为准。

这个顺序只是在你想不明白问题的时候帮助你分析罢了。

比如你现在加载了一个user.name属性。

结果你发现出来的结果和你想的不一样,那肯定是别的优先级比你高的属性覆盖你的配置属性了,

那你就可以看着这个顺序挨个排查。

哪个位置有可能覆盖了你的属性。

有时时候,我们经常出现属性被覆盖的问题,就是这个原因造成的。

在yaml中配置了user.name属性值,然后读取出来的时候居然不是自己的配置值,

因为在系统属性中有一个属性叫做user.name,两个相互冲突了。

而系统属性的加载优先顺序在上面这个列表中是5号,高于3号,所以SpringBoot最终会加载系统配置属性

user.name。

3. 知识小结

  1. 使用jar命令启动SpringBoot工程时可以使用临时属性替换配置文件中的属性
  2. 临时属性添加方式:java –jar 工程名.jar –-属性名=值
  3. 多个临时属性之间使用空格分隔
  4. 临时属性必须是当前boot工程支持的属性,否则设置无效

二、开发环境中使用临时属性

1. 如何操作

临时使用目前是有了,但是上线的时候通过命令行输入的临时属性必须是正确的啊,

那这些属性配置值我们必须在开发环境中测试好才行。

下面说一下开发环境中如何使用临时属性,其实就是Idea界面下如何操作了。

打开SpringBoot引导类的运行界面,在里面找到配置项。

其中Program arguments对应的位置就是添加临时属性的,可以加几个试试效果。

做到这里其实可以产生一个思考了,我们运行main方法的时候,

如果想使用main方法的参数,也就是下面的args参数,就是在上面这个位置添加的参数。

public static void main(String[] args) {
}

原来是这样,通过这个args就可以获取到参数。再来看我们的引导类是如何书写的

public static void main(String[] args) {SpringApplication.run(SSMPApplication.class,args);
}

这个args参数居然传递给了run方法,看来在Idea中配置的临时参数就是通过这个位置传递到我们的程序中的。

言外之意,这里如果不用这个args是不是就断开了外部传递临时属性的入口呢?

是这样的,我们可以使用下面的调用方式,这样外部临时属性就无法进入到SpringBoot程序中了。

public static void main(String[] args) {SpringApplication.run(SSMPApplication.class);
}

或者还可以使用如下格式来玩这个操作,就是将配置不写在配置文件中,直接写成一个字符串数组,传递给程序入口。

当然,这种做法并没有什么实际开发意义。

public static void main(String[] args) {String[] arg = new String[1];arg[0] = "--server.port=8082";SpringApplication.run(SSMPApplication.class, arg);
}

2. 知识小结

  1. 启动SpringBoot程序时,可以选择是否使用命令行属性为SpringBoot程序传递启动属性

3. 思考

现在使用临时属性可以在启动项目前临时更改配置了,但是新的问题又出来了。

临时属性好用是好用,就是写的多了会很麻烦。

比如我现在有个需求,上线的时候使用临时属性配置20个值,这下可麻烦了,能不能搞得简单点,集中管理一下

呢?比如说搞个文件,加载指定文件?还真可以。怎么做呢?下面将会讲解。、

三、配置文件分类

1. 简介

SpringBoot提供了配置文件和临时属性的方式来对程序进行配置。

前面一直说的是临时属性,这一节要说说配置文件了。

其实这个配置文件我们一直在使用,只不过我们用的是SpringBoot提供的4级配置文件中的其中一个级别。

2. 4个级别

4个级别分别是:

  1. 类路径下配置文件(一直使用的是这个,也就是resources目录中的application.yml文件)
  2. 类路径下config目录下配置文件
  3. 程序包所在目录中配置文件
  4. 程序包所在目录中config目录下配置文件

上述4种文件是提供给你了4种配置文件书写的位置,功能都是一样的,都是做配置的。

差别就是因为位置不同,产生了差异。

总体上来说,4种配置文件如果都存在的话,有一个优先级的问题,说白了就是加入4个文件我都有,

里面都有一样的配置,谁生效的问题。上面4个文件的加载优先顺序为

  1. file :config/application.yml 【最高】
  2. file :application.yml
  3. classpath:config/application.yml
  4. classpath:application.yml 【最低】

3. 为什么设计多种配置文件?

一个典型的应用

场景A:你作为一个开发者,你做程序的时候为了方便自己写代码,配置的数据库肯定是连接你自己本机的,

咱们使用4这个级别,也就是之前一直用的application.yml。

场景B:现在项目开发到了一个阶段,要联调测试了,连接的数据库是测试服务器的数据库,肯定要换一组配置

吧。你可以选择把你之前的文件中的内容都改了,目前还不麻烦。

场景C:测试完了,一切OK。你继续写你的代码,你发现你原来写的配置文件被改成测试服务器的内容了,你要

再改回来。

现在明白了不?场景B中把你的内容都改掉了,你现在要重新改回来,以后呢?改来改去吗?

解决方案很简单,用上面的3这个级别的配置文件就可以快速解决这个问题,再写一个配置就行了。

两个配置文件共存,因为config目录中的配置加载优先级比你的高,

所以配置项如果和级别4里面的内容相同就覆盖了,这样是不是很简单?

级别1和2什么时候使用呢?

程序打包以后就要用这个级别了,管你程序里面配置写的是什么?

我的级别高,可以轻松覆盖你,就不用考虑这些配置冲突的问题了。

4. 知识小结

  1. 配置文件分为4种
    • 项目类路径配置文件:服务于开发人员本机开发与测试
    • 项目类路径config目录中配置文件:服务于项目经理整体调控
    • 工程路径配置文件:服务于运维人员配置涉密线上环境
    • 工程路径config目录中配置文件:服务于运维经理整体调控
  1. 多层级配置文件间的属性采用叠加并覆盖的形式作用于程序

四、自定义配置文件

1. 代码位置

2. 如何自定义配置文件

之前咱们做配置使用的配置文件都是application.yml,其实这个文件也是可以改名字的,这样方便维护。

比如我2023年4月1日搞活动,走了一组配置,2023年5月1日活动取消,恢复原始配置,这个时候只需要重新更

换一下配置文件就可以了但是你总不能在原始配置文件上修改吧,不然搞完活动以后,活动的配置就留不下来

了,不利于维护。

这样就需要我们自定义配置文件

3. 自定义配置文件

3.1. 两种方式

方式一:使用临时属性设置配置文件名

方式一:使用临时属性设置配置文件名,注意仅仅是名称,不要带扩展名

方式二:使用临时属性设置配置文件路径

方式二:使用临时属性设置配置文件路径,这个是全路径名

3.2 可以设置加载多个配置文件

可以设置加载多个配置文件

使用的属性一个是spring.config.name,另一个是spring.config.location,这个一定要区别清楚。

3.3 温馨提示

我们现在研究的都是SpringBoot单体项目,就是单服务器版本。

其实企业开发现在更多的是使用基于SpringCloud技术的多服务器项目。

这种配置方式和我们现在学习的完全不一样,所有的服务器将不再设置自己的配置文件,

而是通过配置中心获取配置,动态加载配置信息。

为什么这样做?

答案:集中管理

3.4 知识小结

  1. 配置文件可以修改名称,通过启动参数设定
  2. 配置文件可以修改路径,通过启动参数设定
  3. 微服务开发中配置文件通过配置中心进行设置

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于vue框架的的汇生活家居商城的设计与实现bdjlq(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:商品分类,商品信息,用户 开题报告内容 开题报告 项目名称:基于Vue框架的汇生活家居商城的设计与实现 一、项目背景与意义 随着互联网技术的不断发展和普及,电子商务已成为现代商业的重要组成部分。家居商城作…

免费可离线的AI抠图工具(鲜艺AI抠图 )免费下载

鲜艺AI抠图是一款使用Tauri 2 和RMBG-1.4 开发并免费提供的AI抠图工具,它能够快速去除图片背景,并支持本地和在线图片处理。: 极速AI抠图: 基于最新的AI技术,能够精准识别图像中的前景和背景,实现快速抠图…

面试经典 150 题.P27. 移除元素(002)

本题来自:力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解: class Solution {public int removeElement(int[] nums, int…

标准正态分布的数据 tensorflow 实现正态分布图,python 编程,数据分析和人工智能...

登录后复制 import tensorflow as tfimport matplotlib.pyplot as plt# 设置随机种子以获得可重复的结果tf.random.set_seed(42)# 生成正态分布的数据# mean0 和 stddev1 表示生成标准正态分布的数据# shape(1000,) 表示生成1000个数据点data tf.random.normal(mean0, stddev1…

13.音乐管理系统(基于SpringBoot + Vue)

目录 1.系统的受众说明 ​​​​​​​ 2 需求分析 2.1用例图及用例分析 2.1.1 用户用例图及用例分析 2.1.2 管理员用例图及用例分析 2.2 系统结构图和流程图 2.2.1 音乐播放器的系统流程图(图2.2.1-1) 2.2.2 系统功能表(表2.2.2…

iOS调试真机出现的 “__llvm_profile_initialize“ 错误

一、错误形式&#xff1a; app启动就崩溃&#xff0c;如下&#xff1a; Demo__llvm_profile_initialize:0x1045f7ab0 <0>: stp x20, x19, [sp, #-0x20]!0x1045f7ab4 <4>: stp x29, x30, [sp, #0x10]0x1045f7ab8 <8>: add x29, sp, #0x100x1…

[Linux] linux 软硬链接与动静态库

标题&#xff1a;[Linux] linux 软硬链接与动静态库 个人主页水墨不写bug &#xff08;图片来源于网络&#xff09; /** _oo0oo_* o8888888o* 88" . "88* (| -_- |)* …

[mysql]相关子查询

相关子查询 相关子查询的概述 我们前面把单行子查询和多行子查询就已经说完了,我们现在要把继续把相关子查询的内容给大家说明白,因为之前用的都是不相关子查询的案例, 我们来谈一谈相关子查询,记住单行子查询和多行子查询是可以进行相关子查询,只是我们刚才写的案例都是相关…

【C++】—— priority_queue :平衡效率与秩序的算法利器

去感受一棵草、一缕风、一场日落&#xff0c;去重新触摸真正的生活。 ——高盛元 目录 1、优先级队列 1.1什么是优先级队列 1.2 priority_queue 的使用 1.3 仿函数 2、priority_queue 的模拟实现 2.1整体框架接口 2.2插入&&向上调整 2.2删除&&向下调整…

AI与低代码的碰撞:企业数字化转型的新引擎

引言 在当今的商业环境中&#xff0c;企业数字化转型已从选择题变成了必答题。面对日益复杂的市场竞争和不断变化的客户需求&#xff0c;传统的开发模式常常显得力不从心——开发周期冗长、技术门槛高、成本居高不下&#xff0c;企业很难快速响应市场变化。而在这种背景下&…

智慧用电监控装置:引领0.4kV安全用电新时代

在智能科技日新月异的今天&#xff0c;电力安全与管理正迎来一场前所未有的革新。为0.4kV以下TT、TN系统打造的智慧用电在线监控装置不仅重新定义了电力监控的边界&#xff0c;更为建筑安全用电筑起了一道坚不可摧的防线。 装置集成了单、三相交流电精确测量、四象限电能计量、…

【Linux内核揭秘】深入理解命令行参数和环境变量

文章目录 命令行参数什么是命令行参数main函数的参数 环境变量什么是环境变量常见的环境变量PATHHOMESHELLPWDOLDPWD 本地变量总结 命令行参数 什么是命令行参数 形如这样的命令后面带的选项就是命令行参数。 首先我们要了解一下命令行参数的原理。 我们知道像ls,mkdir,touch等…

leetcode57:插入区间

给你一个 无重叠的 &#xff0c;按照区间起始端点排序的区间列表 intervals&#xff0c;其中 intervals[i] [starti, endi] 表示第 i 个区间的开始和结束&#xff0c;并且 intervals 按照 starti 升序排列。同样给定一个区间 newInterval [start, end] 表示另一个区间的开始和…

探熵科技|以科技赋能销售,创造卓越业绩。

发展 在当今时代&#xff0c;AI 和大数据技术迅猛发展&#xff0c;各行业与大数据技术的融合已成为推动企业发展的重要力量。 天眼销 探熵科技作为一家专注于商业数据服务的专业公司&#xff0c;始终致力于为企业和个人提供高质量的数据解决方案。我们凭借深厚的技术实力和对…

Nginx+Lua脚本+Redis 实现自动封禁访问频率过高IP

1 、安装OpenResty 安装使用 OpenResty&#xff0c;这是一个集成了各种 Lua 模块的 Nginx 服务器&#xff0c;是一个以Nginx为核心同时包含很多第三方模块的Web应用服务器&#xff0c;使用Nginx的同时又能使用lua等模块实现复杂的控制。 &#xff08;1&#xff09;安装编译工具…

批量剪辑视频软件源码搭建全解析,支持OEM

一、引言 在当今数字化内容创作的时代&#xff0c;视频制作的需求呈爆发式增长。无论是社交媒体上的短视频创作者&#xff0c;还是专业的视频制作团队&#xff0c;都面临着大量视频剪辑的任务。批量剪辑视频软件应运而生&#xff0c;它能够显著提高视频剪辑的效率&#xff0c;满…

C语言笔记(指针题目)例题+图解

本文分为两部分 &#xff0c;第一部分为数组、字符串、字符指针在sizeof和strlen中的辨析&#xff0c;第二部分是一些笔试题目。若有错误&#xff0c;请批评指正。 目录 1.第一部分 1.1.数组名的使用 1.1.1一维整型数组在sizeof中的使用 1.1.2一维字符数组在sizeof中的使用…

015:地理信息系统开发平台ArcGIS Engine10.2与ArcGIS SDK for the Microsoft .NET Framework安装教程

摘要&#xff1a;本文详细介绍地理信息系统开发平台ArcGIS Engine10.2与ArcGIS SDK for the Microsoft .NET Framework的安装流程。 一、软件介绍 ArcGIS Engine 10.2是由Esri公司开发的一款强大的GIS&#xff08;地理信息系统&#xff09;开发平台。该软件基于ArcGIS 10.2 fo…

华为手机卸载系统应用的方法

摘要&#xff1a; 1.手机环境&#xff1a;手机需要开启开发者模式并使用usb连接电脑&#xff0c;并选择文件传输模式 2.电脑环境&#xff1a;使用鸿蒙工具箱进行傻瓜操作或安装adb工具进行命令卸载 3.鸿蒙工具箱和adb工具本质都是使用adb shell pm uninstall -k --user 0 xx…

大数据中心年度数据运营服务项目实施技术方案(183页WORD)

文档介绍&#xff1a; 本大数据中心年度数据运营服务项目实施技术方案&#xff0c;通过构建高效的数据集成与治理平台、数据分析平台以及创新的数据服务模式&#xff0c;旨在为企业内外部用户提供更加精准、高效的数据支持。同时&#xff0c;注重安全与合规保障&#xff0c;确…