当前位置: 首页 > news >正文

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. 微服务开发中配置文件通过配置中心进行设置

相关文章:

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

目录 一、临时属性设置 1. 简介 2. 属性加载优先级 那是否还有其他的配置方式呢? 3. 知识小结 二、开发环境中使用临时属性 1. 如何操作 2. 知识小结 3. 思考 三、配置文件分类 1. 简介 2. 4个级别 3. 为什么设计多种配置文件? 一个典型的应…...

MySQL定时异机备份

场景:将A机器MySQL数据库部分表每日定时备份到B机器上 (只适用于Linux) 实现方式算是比简单了,就是用mysqldump生成文件,使用scp命令传输到另一台机器上。 1. 编写备份shell脚本 在A机器新建脚本 (当然没有vim的话vi…...

MMA: Multi-Modal Adapter for Vision-Language Models

两个观察 图1所示。各种基于transformer的CLIP模型中不同层的数据集级识别精度。这个实验是为了确定样本属于哪个数据集。我们用不同的种子运行了三次,并报告了每层识别精度的平均值和标准差。 X E m b e d XEmbed XEmbed是指变压器块之前的文本或图像嵌入层&#x…...

uniapp通过id获取div的宽度,高度,位置等(应该是 任意平台都通用 )

uniapp通过id获取div的宽度&#xff0c;高度&#xff0c;位置等&#xff08;应该是 任意平台都通用 &#xff09; <template><view class"" id"domId"></view> </template>// 如果获取的dome高度等不对&#xff0c;还需要加上延迟…...

Python Transformer 模型的基本原理:BERT 和 GPT 以及它们在情感分析中的应用

Transformer 模型的基本原理&#xff1a;BERT 和 GPT 以及它们在情感分析中的应用 近年来&#xff0c;Transformer 模型在自然语言处理&#xff08;NLP&#xff09;领域取得了巨大成功&#xff0c;为任务如翻译、生成文本、问答和情感分析带来了显著的性能提升。本文将介绍 Tr…...

【云原生】Kubernets1.29部署StorageClass-NFS作为存储类,动态创建pvc(已存在NFS服务端)

文章目录 在写redis集群搭建的时候,有提到过使用nfs做storageclass,那时候kubernetes是1.20版本,https://dongweizhen.blog.csdn.net/article/details/130651727 现在使用的是kubernetes 1.29版本,根据之前的修改方式并未生效,反而提示:Error: invalid argument "Re…...

使用 Pandas 进行时间序列分析的 10个关键点

使用Pandas进行时间序列分析的10个关键点&#xff08;由于篇幅限制&#xff0c;这里调整为10个&#xff0c;但实际操作中可能涉及更多细节&#xff09;如下&#xff1a; 1. 创建时间序列数据 时间序列数据是指在多个时间点上形成的数值序列。在Pandas中&#xff0c;可以使用t…...

使用 Mermaid 语言描述 AGI 系统架构图

使用Mermaid语言描述AGI系统架构图 一、整体架构概述 以下是一个简化的AGI&#xff08;Artificial General Intelligence&#xff0c;通用人工智能&#xff09;系统架构的Mermaid描述。该系统主要包括数据收集与预处理、模型训练、推理与决策以及交互接口等模块&#xff0c;各…...

绘制线性可分支持向量机决策边界图 代码解析

### 绘制线性可分支持向量机决策边界图 def plot_classifer(model, X, y):# 超参数边界x_min -7x_max 12y_min -12y_max -1step 0.05# meshgridxx, yy np.meshgrid(np.arange(x_min, x_max, step),np.arange(y_min, y_max, step))# 模型预测z model.predict(np.c_[xx.ra…...

No.23 笔记 | WEB安全 - 任意文件漏洞 part 5

本文全面且深入地探讨了文件上传漏洞相关知识。从基础概念出发&#xff0c;清晰地阐述了文件上传漏洞的定义及其产生的本质原因&#xff0c;同时列出了该漏洞成立的必要条件。详细说明了文件上传漏洞可能对服务器控制权、网站安全以及业务运营带来的严重危害。 文中还深入解析了…...

EasyPlayer.js网页播放器,支持FLV、HLS、WebSocket、WebRTC、H.264/H.265、MP4、ts各种音视频流播放

EasyPlayer.js功能&#xff1a; 1、支持解码H.264视频(Baseline, Main, High Profile全支持&#xff0c;支持解码B帧视频) 2、支持解码H.265视频&#xff08;flv id 12&#xff09; 3、支持解码AAC音频(LC,HE,HEv2 Profile全支持) 4、支持解码MP3音频以及Speex音频格式 5、可…...

WPF数据绑定的五大模式

WPF&#xff08;Windows Presentation Foundation&#xff09;是微软推出的一种用于构建Windows用户界面的UI框架。它支持数据绑定&#xff0c;允许开发者将UI元素与数据源绑定&#xff0c;从而实现数据和界面的自动同步。WPF数据绑定有几种不同的模式&#xff0c; 以下是五种…...

从零到一:大学新生编程入门攻略与成长指南

文章目录 每日一句正能量前言编程语言选择&#xff1a;为大学新生量身定制Python&#xff1a;简单而强大的选择JavaScript&#xff1a;Web开发的基石Java&#xff1a;面向对象的经典C#&#xff1a;微软的全能选手 学习资源推荐&#xff1a;编程学习的宝藏在线课程教程和文档书籍…...

详细分析Pytorch中的transpose基本知识(附Demo)| 对比 permute

目录 前言1. 基本知识2. Demo 前言 原先的permute推荐阅读&#xff1a;详细分析Pytorch中的permute基本知识&#xff08;附Demo&#xff09; 1. 基本知识 transpose 是 PyTorch 中用于交换张量维度的函数&#xff0c;特别是用于二维张量&#xff08;矩阵&#xff09;的转置操…...

初识WebGL

思路&#xff1a; 构建<canvas>画布节点&#xff0c;获取其的实例。使用getWebGLContext() 拿到画布上下文。拿到上下文用clearColor() 设置背景颜色。最后清空canvas画布,是为了清除颜色缓冲区。 html结构&#xff1a; <!DOCTYPE html> <html lang"en&…...

【力扣】Go语言回溯算法详细实现与方法论提炼

文章目录 一、引言二、回溯算法的核心概念三、组合问题1. LeetCode 77. 组合2. LeetCode 216. 组合总和III3. LeetCode 17. 电话号码的字母组合4. LeetCode 39. 组合总和5. LeetCode 40. 组合总和 II小结 四、分割问题6. LeetCode 131. 分割回文串7. LeetCode 93. 复原IP地址小…...

「C/C++」C/C++ 之 第三方库使用规范

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…...

六、元素应用CSS的习题

题目一&#xff1a; 使用CSS样式对页面元素加以修饰&#xff0c;制作“ 旅游攻略 ”网站。如下图所示 运行效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>旅游攻略</title><…...

正式入驻!上海斯歌BPM PaaS管理软件等产品入选华为云联营商品

近日&#xff0c;上海斯歌旗下BPM PaaS管理软件&#xff08;NBS&#xff09;等多款产品入选华为云云商店联营商品&#xff0c;上海斯歌正式成为华为云联营商品合作伙伴。用户登录华为云云商店即可采购上海斯歌的BPM PaaS产品及配套服务。通过联营模式&#xff0c;双方合作能够深…...

使用 Axios 上传大文件分片上传

背景 在上传大文件时&#xff0c;分片上传是一种常见且有效的策略。由于大文件在上传过程中可能会遇到内存溢出、网络不稳定等问题&#xff0c;分片上传可以显著提高上传的可靠性和效率。通过将大文件分割成多个小分片&#xff0c;不仅可以减少单次上传的数据量&#xff0c;降…...

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

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

PART 1 数据挖掘概论 — 数据挖掘方法论

目录 数据库知识发掘步骤 数据挖掘技术的产业标准 CRISP-DM SEMMA 数据库知识发掘步骤 数据库知识发掘(Knowledge Discovery in Database,KDD)是从数据库中的大量数据中发现不明显、之前未知、可能有用的知识。 知识发掘流程(Knowledge Discovery Process)包括属性选择…...

Centos安装ffmpeg的方法

推荐第一个,不要自己编译安装,太难了,坑多。 在 CentOS 上安装 FFmpeg 有几种方法,以下是两种常见的方法: ### 方法一:使用 RPM Fusion 仓库安装 1. **启用 RPM Fusion 仓库**: RPM Fusion 是一个第三方仓库,提供了许多 CentOS 官方仓库中没有的软件包。 ```bash…...

理解SQL中通配符的使用

前言 SQL 是一种标准化的结构化查询语言&#xff0c;涉及结构化查询时&#xff0c;高效地检索数据至关重要。而通配符是SQL中模式匹配的有效的方法。使用通配符可以更轻松地检索到所需的确切数据。通配符允许我们定义多功能查询条件。本文将 介绍SQL通配符的基础知识及用法。 …...

SpringBoot篇(简化操作的原理)

目录 一、代码位置 二、统一版本管理&#xff08;parent&#xff09; 三、提供 starter简化 Maven 配置 四、自动配置 Spring&#xff08;引导类&#xff09; 五、嵌入式 servlet 容器 一、代码位置 二、统一版本管理&#xff08;parent&#xff09; SpringBoot项目都会继…...

Cesium的模型(ModelVS)顶点着色器浅析

来自glTF和3D Tiles的模型会走ModelVS.glsl。这个文件不单独是把模型顶点转换为屏幕坐标&#xff0c;还包含了丰富的处理过程。 Cesium是根据定义的Define判断某个行为是否需要被执行&#xff0c;比如#define HAS_SILHOUETTE&#xff0c;说明需要计算模型外轮廓线。 Cesium的…...

机器人领域中的scaling law:通过复现斯坦福机器人UMI——探讨数据规模化定律(含UMI的复现关键)

前言 在24年10.26/10.27两天&#xff0c;我司七月在线举办的七月大模型机器人线下营时&#xff0c;我们带着大家一步步复现UMI&#xff0c;比如把杯子摆到杯盘上(其中1-2位学员朋友还亲自自身成功做到该任务) 此外&#xff0c;我还特地邀请了针对UMI做了改进工作的fastumi作者…...

C++之多态的深度剖析

目录 前言 1.多态的概念 2.多态的定义及实现 2.1多态的构成条件 2.1.1重要条件 2.1.2 虚函数 2.1.3 虚函数的重写/覆盖 2.1.4 选择题 2.1.5 虚函数其他知识 协变&#xff08;了解&#xff09; 析构函数的重写 override 和 final关键字 3. 重载&#xff0c;重写&…...

Microsoft Office PowerPoint制作科研论文用图

Microsoft Office PowerPoint制作科研论文用图 1. 获取高清图片2. 导入PPT3. 另存为“增强型windows元文件”emf格式4. 画图剪裁 1. 获取高清图片 这里指通过绘图软件画分辨率高的图片&#xff0c;我一般使用python画dpi600的图片。 2. 导入PPT 新建一个PPT&#xff08;注意&a…...

go语言进阶之并发基础

并发 什么是并发&#xff0c;也就是我们常说的多线程&#xff0c;多个程序同时执行。 并发的基础 线程和进程 进程 进程是操作系统中一个重要的概念&#xff0c;指的是一个正在运行的程序的实例。它包含程序代码、当前活动的状态、变量、程序计数器和内存等资源。进程是系…...

手机网站Com/最近新闻头条

C语言第8讲-结构体n课件第八讲-结构体与共用体;结构体与共用体;一、结 构 体;如&#xff1a; struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; };;(2) 定义结构类型的同时定义结构变量;定义的一般形式:;(1) 类型与变量是不同的概念 …...

网站如何做访客统计/网络管理系统

python中使用多线程处理程序&#xff0c;会比一步步的处理节约很多时间&#xff0c;而且通过创建并继承Python的Thread类&#xff0c;重写run()方法&#xff0c;通过自定义的线程类来创建线程&#xff0c;本文介绍python多线程Thread类定义和如何自定义线程类的过程。一、Threa…...

网站建设的英语/词爱站的关键词

对象 ① 锁&#xff1a;每条SQL语句 ② 隔离&#xff1a;事务 锁 ① 并发问题 丢失更新 未确认的读取&#xff08;脏读&#xff09; 不一致的分析&#xff08;非重复读&#xff09;&#xff1a;多次读取相同的数据&#xff08;行&#xff09;不一致&#xff08;其他用户…...

html5怎末做意见反馈网站/微博热搜榜排名今日

gzip 讲解语法&#xff1a;gzip [-d#] filename 其中#为1-9的数字-d&#xff1a;解压缩时使用-#&#xff1a;压缩等级&#xff0c;1 压缩最差&#xff0c;9 压缩最好&#xff0c;6 为默认[rootlocalhost ~]# [ -d test ] && rm -rf test [rootlocalhost ~]# mkdir test…...

小米wifi设置网址入口网站/企业网站建设的目的

在VC6.0中运行控制台程序后&#xff0c;执行完后控制台会出现 Press any key to continue . . . 按任意键&#xff0c;控制台才消失。 但是换到在VC7.0 (VS.NET的VC)中编写的控制台程序&#xff0c;点击运行后&#xff0c;默认情况下马上把控制台关了&#xff0c;让你看…...

如何提高自己的销售技巧/seo入口

首先需要注册tushare数据网站 https://tushare.pro/ 获取token # -*- coding: utf-8 -*- # 导入包 import matplotlib.pyplot as plt import tushare as ts# 获取股票开盘价 #获取数据的时间段-起始时间 start_time=20220101 #获取数据的时间段-结束时间 end_time= 20230314…...