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

news2024/11/27 22:26:11

目录

一、临时属性设置

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.coloradmin.cn/o/2227778.html

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

相关文章

基于SSM+微信小程序的汽车维修管理系统(汽车5)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的汽车维修管理系统实现了三个角色:管理员、员工、用户。 1、管理员实现了首页、管理员管理员、员工管理、用户管理、车辆信息管理、配件管理等 2、员工实…

【51 Pandas+Pyecharts | 深圳市共享单车数据分析可视化】

文章目录 🏳️‍🌈 1. 导入模块🏳️‍🌈 2. Pandas数据处理2.1 读取数据2.2 查看数据信息2.3 处理起始时间、结束时间2.4 增加骑行时长区间列2.5 增加骑行里程区间列 🏳️‍🌈 3. Pyecharts数据可视化3.1 各…

海亮科技亮相第84届中国教装展 尽显生于校园 长于校园教育基因

10月25日,第84届中国教育装备展示会(以下简称“教装展”)在昆明滇池国际会展中心开幕。作为国内教育装备领域规模最大、影响最广的专业展会,本届教装展以“数字赋能教育,创新引领未来”为主题,为教育领域新…

Mac 电脑 使用sudo创建项目后,给了读写权限,仍报权限问题

问题:sudo创建的项目,都已经改成读写权限了,但是修改项目中的内容还是报没权限。 原因:当你使用 sudo 创建项目时。这是因为 sudo 会以 root 用户的身份创建文件和目录,这些文件和目录默认属于 root 用户,…

vue封装信号强度

图标下载链接: https://pan.baidu.com/s/1828AidkCKU1KTkw1SvBwQg?pwd4k7n 共五格信号 信号5为绿色,信号4为绿色,信号3为黄色,信号2为黄色,信号1为红色,信号0为灰色。 子组件 /components/SignalStrength/index.vu…

【JavaScript】入门详解

JavaScript 作为 Web 开发的基石,赋予了网页动态交互的能力。本文将深入浅出地讲解 JavaScript 的核心概念,并结合最新用法进行详细解释和示例。 1. JavaScript 简介 JavaScript 是一种解释型脚本语言,也称弱类型语言,最初设计用…

标准正态分布的数据 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…

Web3 与人工智能的跨界合作:重塑数字经济的新引擎

在当今数字化浪潮汹涌澎湃的时代,Web3 和人工智能这两大前沿技术的跨界合作正逐渐成为重塑数字经济的强大新引擎。 Web3 代表着互联网的新一代发展方向,强调去中心化的理念、用户主权以及数据隐私保护。它致力于打破传统互联网由少数巨头掌控的格局&…

【问题记录】当机器人存在多个串口需要绑定时udevadm的作用

一、正常绑定 输入sudo udevadm info -a /dev/ttyUSBx | grep KERNELS 命令 会出现KERNELS的编号,记录编号。 修改规则文件/etc/udev/rules.d/99-usb.rules 添加以下命令 KERNEL"ttyUSB*", KERNELS"2-1.2:1.0", MODE:"0666", GROU…

江协科技STM32学习- P24 DMA数据转运DMA+AD多通道

🚀write in front🚀 🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝​…

论文阅读 - Pre-trained Online Contrastive Learning for Insurance Fraud Detection

Pre-trained Online Contrastive Learning for Insurance Fraud Detection| Proceedings of the AAAI Conference on Artificial Intelligence 目录 摘要 Introduction Methodology Problem Formulation Pre-trained Model for Enhanced Robustness Detecting Network a…

pycharm与anaconda下的pyside6的安装记录

一、打开anaconda虚拟环境的命令行窗口,pip install,加入清华源: pip install PySide6 -i https://pypi.tuna.tsinghua.edu.cn/simple 二、打开pycharm,在文件--设置--工具--外部工具中配置一下三项: 1、 QtDesigner…

GitHub Star 数量前 5 的开源应用程序生成器

欢迎来的 GitHub Star 数量排名系列文章的第 7 篇——最受欢迎的应用程序生成器。 之前我们已经详细探讨过:在 GitHub 上最受欢迎的——无代码工具、低代码项目、内部工具、CRUD项目、自部署项目和 Airtable 开源替代品。累计超过 50 个优质项目!&#…

【主机游戏】塔尼蚀:神之堕落 游戏介绍

《塔尼蚀:神之堕落》是一款2D横版动作游戏支持简体和繁体中文 https://pan.baidu.com/s/1UT5XSwUcxGQzPOoSuNt3vw?pwdfxbt 。 游戏的基本操作包括: 移动:使用键盘的WASD或方向键进行角色的移动。攻击:鼠标左键或键盘的攻击…

【优选算法篇】前缀之序,后缀之章:于数列深处邂逅算法的光与影

文章目录 C 前缀和详解:基础题解与思维分析前言第一章:前缀和基础应用1.1 一维前缀和模板题解法(前缀和)图解分析C代码实现易错点提示代码解读题目解析总结 1.2 二维前缀和模板题解法(二维前缀和)图解分析C…

【小白学机器学习26】 极大似然估计,K2检验,logit逻辑回归(对数回归)(未完成----)

目录 1 先从一个例题出来,预期值和现实值的差异怎么评价? 1.1 这样一个问题 1.2 我们的一般分析 1.3 用到的关键点1 1.4 但是差距多远,算是远呢? 2 极大似然估计 2.1 极大似然估计的目的 2.1.1 极大似然估计要解决什么问题…

Mount Image Pro,在取证安全的环境中挂载和访问镜像文件内容

天津鸿萌科贸发展有限公司从事数据安全服务二十余年,致力于为各领域客户提供专业的数据恢复、数据备份解决方案与服务,并针对企业面临的数据安全风险,提供专业的相关数据安全培训。 天津鸿萌科贸发展有限公司是 GetData 公司数据恢复与取证工…

什么是元件符号什么是封装

话不多说直接上图 左上角就可以理解为元件的符号,右上角可以理解为元件的封装,右下角是封装得3D图,左下角是真实的芯片。 同时注意我们元件符号的小孔,在封装和焊接时我们可以参照小孔的位置以及对应的引脚。如下图所示&#xff…

AUTOSAR 规范中的设计模式:传感器执行器模式

在 AUTOSAR Adaptive Platform (AP) 规范中,传感器执行器模式是一种典型的设计模式,主要用于实时控制系统中,用来实现传感器数据的获取和执行器指令的发送。该模式通过分离传感器和执行器的实现,使其独立运行并且能够通过某种通信…

【网页设计】学成在线案例

Demo 典型的企业级网站,目的是为了整体感知企业级网站的布局流程,复习以前知识。 集合代码见文章最后。 5.1 准备素材和工具 学成在线 PSD 源文件。开发工具 PS(切图) sublime(代码) chrome&#xff0…