SpringBoot【运维实用篇】---- 配置高级

news2024/12/23 12:25:06

SpringBoot【运维实用篇】---- 配置高级

  • 1. 临时属性设置
    • 属性加载优先级
    • 开发环境中使用临时变量
  • 2. 配置文件分类
  • 3. 自定义配置文件

关于配置在基础篇讲过一部分,基础篇的配置总体上来说就是让各位小伙伴掌握配置的格式。比如配置文件如何写啊,写好的数据如何读取啊,都是基础的语法级知识。在实用篇中就要集中在配置的应用这个方面了,下面就开始配置高级相关内容的第一部分学习,为什么说第一部分,因为在开发实用篇中还有对应的配置高级知识要进行学习。

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

属性加载优先级

现在我们的程序配置受两个地方控制了,第一配置文件,第二临时属性。并且我们发现临时属性的加载优先级要高于配置文件的。

地址奉上: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加载配置的顺序,言外之意,命令行临时属性比配置文件的加载优先级高,所以这个列表上面的优先级低,下面的优先级高。其实这个东西不用背的,你就记得一点,你最终要什么效果,你自己是知道的,不管这个顺序是怎么个高低排序,开发时一定要配置成你要的顺序为准。这个顺序只是在你想不明白问题的时候帮助你分析罢了。

开发环境中使用临时变量

临时使用目前是有了,但是上线的时候通过命令行输入的临时属性必须是正确的啊,那这些属性配置值我们必须在开发环境中测试好才行。下面说一下开发环境中如何使用临时属性,其实就是Idea界面下如何操作了。

打开SpringBoot引导类的运行界面,在里面找到配置项。其中 Program arguments 对应的位置就是添加临时属性的,可以加几个试试效果。

在这里插入图片描述
做到这里其实可以产生一个思考了,如果对java编程熟悉的小伙伴应该知道,我们运行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. 配置文件分类

SpringBoot提供了配置文件和临时属性的方式来对程序进行配置。前面一直说的是临时属性,这一节要说说配置文件了。其实这个配置文件我们一直在使用,只不过我们用的是SpringBoot提供的4级配置文件中的其中一个级别。4个级别分别是:

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

好复杂,一个一个说。其实上述4种文件是提供给你了4种配置文件书写的位置,功能都是一样的,都是做配置的。那大家关心的就是差别了,没错,就是因为位置不同,产生了差异。总体上来说,4种配置文件如果都存在的话,有一个优先级的问题,说白了就是加入4个文件我都有,里面都有一样的配置,谁生效的问题。上面4个文件的加载优先顺序为

  1. file :config/application.yml 【最高】
  2. file :application.yml
  3. classpath:config/application.yml
  4. classpath:application.yml 【最低】
  • 场景A:你作为一个开发者,你做程序的时候为了方便自己写代码,配置的数据库肯定是连接你自己本机的,咱们使用4这个级别,也就是之前一直用的application.yml。
  • 场景B:现在项目开发到了一个阶段,要联调测试了,连接的数据库是测试服务器的数据库,肯定要换一组配置吧。你可以选择把你之前的文件中的内容都改了,目前还不麻烦。
  • 场景C:测试完了,一切OK。你继续写你的代码,你发现你原来写的配置文件被改成测试服务器的内容了,你要再改回来。现在明白了不?场景B中把你的内容都改掉了,你现在要重新改回来,以后呢?改来改去吗?

解决方案很简单,用上面的3这个级别的配置文件就可以快速解决这个问题,再写一个配置就行了。两个配置文件共存,因为config目录中的配置加载优先级比你的高,所以配置项如果和级别4里面的内容相同就覆盖了,这样是不是很简单?

级别1和2什么时候使用呢?程序打包以后就要用这个级别了,管你程序里面配置写的是什么?我的级别高,可以轻松覆盖你,就不用考虑这些配置冲突的问题了。

3. 自定义配置文件

之前咱们做配置使用的配置文件都是application.yml,其实这个文件也是可以改名字的,这样方便维护。比如我2020年4月1日搞活动,走了一组配置,2020年5月1日活动取消,恢复原始配置,这个时候只需要重新更换一下配置文件就可以了。但是你总不能在原始配置文件上修改吧,不然搞完活动以后,活动的配置就留不下来了,不利于维护。

自定义配置文件方式有如下两种:

方式一:使用临时属性设置配置文件名,注意仅仅是名称,不要带扩展名
在这里插入图片描述

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

在这里插入图片描述

也可以设置加载多个配置文件
在这里插入图片描述
使用的属性一个是spring.config.name,另一个是spring.config.location,这个一定要区别清楚。

温馨提示

我们现在研究的都是SpringBoot单体项目,就是单服务器版本。其实企业开发现在更多的是使用基于SpringCloud技术的多服务器项目。这种配置方式和我们现在学习的完全不一样,所有的服务器将不再设置自己的配置文件,而是通过配置中心获取配置,动态加载配置信息。为什么这样做?集中管理。这里不再说这些了,后面再讲这些东西。

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

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

相关文章

HCIP之路VLAN,三层交换机,STP---生成树协议,MSTP

VLAN---虚拟局域网 垃圾流量问题 网络安全问题 VLAN特点 一个vlan就是一个广播域,不同vlan内部的数据无法进行跨广播域通讯 vlan的划分不受地域限制 vlan的实现 主机的网卡一般只能发送和接收无标记帧(Untagged Frame)。Tagged Frame --- 标…

Nginx的优化-安全与防盗链

1.Nginx的网页优化-网页压缩 在Nginx的ngx_http_gzip_module压缩模块提供对文件内容压缩的功能。进行相关的配置修改,就能实现Nginx页面的压缩,达到节约带宽,提升用户访问速度 重启服务进行访问测试 2.配置Nginx的图片缓存 当Nginx将网页数据…

ElasticSearch入门学习:基础概念与简介

文章目录 一、ElasticSearch基础概念铺垫1.1 全文检索概念1.2 正排索引与倒排索引 二、ElasticSearch简介2.1 ElasticSearch简介2.2 ElasticSearch生态圈-Elastic Stack2.3 ElasticSearch与Solr搜索引擎对比 声明:以下内容均来自b站 ElasticSearch入门到精通教程&a…

百度平地起“雷”,突然爆出的QPS数据意味着什么?

鲁迅先生1923年在北师大发表了著名的演讲《娜拉走后怎样》,其中的提问与思考方式振聋发聩,直到今天也依旧有效。面对很多产业现象、技术趋势,我们也不妨多问几个“之后怎样”。 比如说,自ChatGPT爆火之后,中国各个互联…

敏捷的动力之源是小而美(powered by GPT)

​ Stacey模型反映了组织运作模式。纵轴是政制,横轴是技术。敏捷偏右下↘,在技术领域与天地斗。反敏捷偏左上,在政制领域与人斗。敏捷是活化,反敏捷是消耗。敏捷的根本障碍是管理文化。理解了这个图就理解了敏捷。要么权力-恐惧-小…

倾斜摄影超大场景的三维模型OSGB格式转换3DTILES,为什么数据文件大小会变大?

倾斜摄影超大场景的三维模型OSGB格式转换3DTILES,为什么数据文件大小会变大? 在将倾斜摄影超大场景的三维模型从OSGB格式转换到3DTILES格式时,数据文件大小可能会比原始数据文件变大的原因主要有以下几个: 1、数据压缩方式不同&a…

Hive基础和使用详解

文章目录 1. hive的启动2. hive -help 命令3. hive -e 命令4. hive -f 命令5. 退出hive窗口6. 在hive窗口中执行dfs -ls /;7. Hive其他参考 1. hive的启动 前置条件: 1.保证hdfs和yarn已启动 2.保证hive的元数据库mysql已启动 启动方式一: hive命令 --切换到hive目…

基础自动化测试脚本开发——Loadrunner如何进行网站脚本开发

一、检查虚拟机ip是否与宿主机ip网段一样 若发现虚拟机IP地址网段与宿主机IP地址不一致时,应在手动改为宿主机IP网段的静态IP地址。 在dos系统下利用ping命令来判断网页的连通性,若连通性不通过,则重新修改分配该虚拟机静态IP地址&#xff08…

二分查找学习总结心得

二分查找一般运用在有序数组中的查找,一般分为开区间、闭区间和半开半闭区间三种写法 闭区间 闭区间是指包含左右两边元素的区间,例如:区间[a, b]包含元素 a b ,称为闭区间。 代码1 # 左闭右闭 区间写法 在数组 nums 中寻找 target def …

LVS负载均衡集群——NAT部署

一、企业群集应用概述 1、群集的含义 • Cluster、集群、群集 • 由多台主机构成,但对外只表现为一个整体,只提供一个访问入口(域名或IP地址),相当于一台大型计算机 2、问题及解决方法 问题: 互联网应用中,随着站…

说说Java日志那些事

日志是每个应用程序在开发的过程中必不可少的组件,通过日志输出可以获取项目的一些运行信息,监控项目的运行指标等,同时,通过学习Java日志框架还可以学习到桥接器与适配器模式等。 日志框架 log4j (日志实现&#xf…

上线控制台,降低使用门槛|Higress 1.0.0 RC 版本发布

作者:澄潭 前言 历时 5 个多月,Higress 推出了首个 RC (Release Candidate,即正式发布的候选)版本 1.0.0-rc,用户可以通过控制台,开箱即用地使用云原生网关。 选用 Higress 作为云原生网关的…

探究GPU同时做渲染与通用计算的并行性

在10年前,随着CUDA与OpenCL的纷纷出炉,GPGPU也着实热了一把。而现今,不少公司更是将GPGPU作为挖矿、搞机器学习的计算利器。于是乎,有许多言论声称GPU将很快取代CPU!那么现代化的GPGPU是否具有如此强大的威力甚至于能取…

sql注入知识---时间盲注

MySQL手注之时间盲注详解 时间盲注原理:注意:基于时间盲注sleep函数函数用法:例子:观察以下语句 基于时间盲注if函数函数用法: 基本步骤:基于时间的盲注案例(sqli-lab less-9)枚举当…

【Vue】学习笔记-组件化编程

学习笔记-组件化编程 模块与组件、模块化与组件化非单文件组件基本使用组件注意事项组件的嵌套VueComponent一个重要的内置关系 单文件组件 模块与组件、模块化与组件化 模块 a.理解:向外提供特定功能的js程序,一般就是一个js文件 b.为什么:j…

实验8---SpringMVC基础

实验八 SpringMVC基础 一、实验目的及任务 通过该实验,掌握SpringMVC框架搭建步骤,掌握SpringMVC控制器的编写方法以及与spring依赖注入结合方法。 二、实验环境及条件 主机操作系统为Win10,Tomcat,j2sdk1.6或以上版本。 三、实验实施…

使用Linux运维常识

一.基础操作 1.终端常用快捷键 快捷键描述ctrl键盘左键向左跳一个单词ctrl键盘右键向右跳一个单词Ctrl c停止当前正在运行的命令。Ctrl z将当前正在运行的命令放入后台并暂停它的进程。Ctrl d关闭当前终端会话。Ctrl l清屏,也可以用clear命令实现Tab自动补全当…

倾斜摄影超大场景的三维模型转换3DTILES格式有哪些好处?

倾斜摄影超大场景的三维模型转换3DTILES格式有哪些好处? 倾斜摄影超大场景的三维模型转换到3D Tiles格式有以下几个好处: 1、数据存储效率高:3D Tiles是一种高效的地理数据存储格式,能够将大规模的倾斜摄影三维模型数据分块存储…

Hive312的计算引擎由MapReduce(默认)改为Spark(亲测有效)

一、Hive引擎包括:默认MR、tez、spark 在低版本的hive中,只有两种计算引擎mr, tez 在高版本的hive中,有三种计算引擎mr, spark, tez 二、Hive on Spark和Spark on Hive的区别 Hive on Spark:Hive既存储元数据又负责SQL的解析&…

【Linux】生产者消费者模型——环形队列RingQueue(信号量)

文章目录 铺垫信号量信号量概念信号量PV操作信号量基本接口 环形队列的生产消费模型引入环形队列访问环形队列代码实现代码改造多生产者多消费者代码 总结 铺垫 之前写的代码是存在不足的地方的: 我们使用线程操作临界资源的时候要先去判断临界资源是否满足条件&am…