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

【运维篇】二、配置文件与多环境控制

文章目录

  • 1、临时属性
  • 2、IDEA中的临时属性
  • 3、配置文件4级分类
  • 4、关于四级分类的思考
  • 5、自定义配置文件
  • 6、多环境开发(yaml版)
  • 7、配置文件按环境分类
  • 8、include与group再细粒度
  • 9、一点思考
  • 10、多环境开发兼容问题

请添加图片描述

1、临时属性

jar包或者镜像已经打完了,想修改下服务的配置,如何实现? ⇒ 临时属性

在这里插入图片描述

如修改服务的端口:

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

携带多个属性启动SpringBoot,属性间使用空格分隔

java –jar springboot.jar --server.port=80  --spring.datasource.druid.password = admin123

以上能生效的原因,是因为命令行的参数优先级高于配置文件,配置文件中的配置被覆盖,关于优先级,可查看这里:

在这里插入图片描述
总结即:

  • 临时属性添加方式:java –jar 工程名.jar –-属性名=值
  • 临时属性必须是当前boot工程中有的属性,否则设置无效(不会报错)

2、IDEA中的临时属性

在这里插入图片描述

而在IDEA中,想加临时属性可以编辑配置,修改Environment.Program.arguments

在这里插入图片描述

上面的这个参数,会被读取到程序启动的main方法参数args中:

在这里插入图片描述

因此,也可以在这里以代码的形式加入相关参数。

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

但为了安全性,一般在启动boot程序时断开读取外部临时配置对应的入口,也就是run方法不传args参数。

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

3、配置文件4级分类

对于开发自己调试的配置和上线后的配置,参数值不同,特别的,对于一些涉密系统,如银行系统,数据库信息在开发阶段更不可能拿到,另外,总不能每次启动都像上面加参数用临时属性来覆盖,再者数据库信息总不能被丢到外面的参数里吧,因此出现配置文件的4级分类,给不同阶段的人使用。
在这里插入图片描述

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

其中:

  • 1级与2级留做系统打包后设置通用属性,1级常用于运维经理进行线上整体项目部署方案调控
  • 3级与4级用于系统开发阶段设置通用属性,3级常用于项目经理进行整体项目属性调控

关于各级的位置:

在这里插入图片描述

而工程路径file,即和jar包或者模块目录同级的目录:

在这里插入图片描述
多层级配置文件间的属性采用叠加并覆盖的形式作用于程序,即不同的取并集,相同的按优先级来覆盖。

4、关于四级分类的思考

既然工程路径file,是和jar包或者模块目录同级的目录,那我在项目project目录下建个application.yml文件,岂不是成了所有模块的公共配置了?

在这里插入图片描述

这一点以后应该用得到!!

5、自定义配置文件

除了以上配置,也可以自定义配置文件,properties与yml文件格式均支持,如:

在这里插入图片描述

然后通过启动参数加载配置文件(无需书写配置文件扩展名):

在这里插入图片描述
也可通过配置文件位置–spring.config.location来生效:

在这里插入图片描述

有多个配置文件时,逗号隔开就好。

在这里插入图片描述

6、多环境开发(yaml版)

实际开发中,生产、测试、开发三个环境配置各不相同,因此要进行多环境的配置开发:

在这里插入图片描述

yml文件写法:使用三个横线来分割文件

在这里插入图片描述

含义解释:

在这里插入图片描述
spring.profiles是过时写法,可改可不改:

在这里插入图片描述

7、配置文件按环境分类

按上面,所有环境的配置写在一起,拿分隔符分开,显然不合理,继续做改善:

在这里插入图片描述
即:

  • 主配置文件中设置公共配置(全局),以及active决定来启用哪一个配置
  • 环境分类配置文件中常用于设置冲突属性,也就是自己独有的属性(局部)

在这里插入图片描述

若使用properties文件来进行多环境启动,则需要多文件,注意文件命名:

在这里插入图片描述

8、include与group再细粒度

include:

根据功能对配置文件中的信息进行拆分,并制作成独立的配置文件,如:

  • application-devDB.yml
  • application-devRedis.yml
  • application-devMVC.yml

此时,写主配置文件就使用include属性在激活指定环境的情况下,同时对多个环境进行加载使其生效,多个环境间使用逗号分隔

spring:profiles:active: devinclude: devDB,devRedis,devMVC

此时,加载了四个文件,即application-dev.yml带下面的这三个,当这四个文件有属性设置冲突时,以后面的为准,最后加载的环境属性生效。

group:

上面的include的写法,有个不好的体验,我从dev切到test,那除了active字段外,include字段的所有值都给改一遍,繁琐,因此,从Spring2.4版开始使用group属性替代include属性,降低了配置书写量

spring:profiles:active: devgroup:"dev": devDB,devRedis,devMVC"pro": proDB,proRedis,proMVC"test": testDB,testRedis,testMVC

此时,切环境就只改active字段就好。

9、一点思考

写到这儿,想起之前有个需求,要在配置里适配Redis的三种模式的连接,即单机、集群、哨兵。当时想着在一个yaml中去实现,但yaml是文本语言,没法if判断,因此以为不能实现,现在引入include,就可以实现一个服务同时适配三种Redis的连接模式

  • 首先定义好三种模式的配置文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在主配置中include一个文件名带变量的动态文件,变量值由一个环境变量控制且给个默认值。目前项目使用k8s部署,那就在deploy中加一个环境变量。改这个环境变量就实现了切换redis模式。

在这里插入图片描述

当然,SpringBoot还有

spring:config:import:# 导入classpath下default目录下的default.properties配置文件- classpath:/default/default.properties

nacos还有shared-configs

spring:cloud:nacos:config:server-addr: localhost:8848file-extension: ymlshared-configs:- application-dev.ymlnamespace: dev

以及官网的其他引入配置的方式,都是实现思路。

10、多环境开发兼容问题

当maven的pom文件中也配置了多环境开发,且与SpringBoot冲突,如一个默认测试,一个默认开发,此时以Maven为主:

在这里插入图片描述

实现兼容:
  • Maven中设置了多环境属性,activeByDefault属性为true,即默认使用这个

在这里插入图片描述

  • SpringBoot配置文件中引用Maven属性@key@

在这里插入图片描述

  • 执行Maven打包指令package,并在生成的boot打包文件.jar文件中查看对应信息,看到引用成功。


Tip1:

有的引用Maven属性仍然用dollar大括号:

在这里插入图片描述

此时直接打包,Maven指令执行结束后,生成jar包,但类参与了编译而配置文件没有参与编译,而是复制到包中,${}未被解析
在这里插入图片描述

此时需要加插件,对资源文件开启对默认占位符的解析
在这里插入图片描述

Tip2:改完activeByDefault后,即使maven clean,active的文件也不对

基于SpringBoot读取Maven配置属性的前提下,如果在Idea下测试工程时,pom.xml每次更新后,需要手动执行compile(编译)方可生效

在这里插入图片描述

相关文章:

【运维篇】二、配置文件与多环境控制

文章目录 1、临时属性2、IDEA中的临时属性3、配置文件4级分类4、关于四级分类的思考5、自定义配置文件6、多环境开发(yaml版)7、配置文件按环境分类8、include与group再细粒度9、一点思考10、多环境开发兼容问题 1、临时属性 jar包或者镜像已经打完了&a…...

【WFA】 VHT-5.2.27 Pre-requisite throughput lower than expected

先看仪表log,可以看到log中只有0.00346666666667Mbps,说明了速率很低 ~~~~~ Storing throughput ~~~~~ Mon, 11 Sep 2023 13:13:06 INFO strmTimeStampList2 count 1 Mon, 11 Sep 2023 13:13:06 INFO Storing $X1 = 0.00346666666667 [Mbps] Mon, 11 Sep 2023 13:13:…...

Pytorch史上最全torch全版本离线文件下载地址大全(9月最新)

以下为pytorch官网的全版本torch文件离线下载地址 torch全版本whl文件离线下载大全https://download.pytorch.org/whl/torch/其中的文件版本信息如下所示(部分版本信息,根据需要仔细寻找进行下载):...

CentOS服务器利用docker搭建中间件命令集合

一、挂载服务器磁盘 #挂盘语句 fdisk /dev/vdb 在分别输入n、p、1、2048、1048575999、w mkfs.ext4 /dev/vdb mkdir /data echo /dev/vdb /data ext4 defaults 0 0 >> /etc/fstab mount -a df -hfirewall-cmd --zonepublic --add-port8002/tcp --permanent firewall-c…...

Flask狼书笔记 | 09_图片社交网站 - 长文

文章目录 9 图片社交网站9.1 项目组织架构9.2 编写程序骨架9.3 高级用户认证9.4 基于用户角色的权限管理9.5 使用Flask-Dropzone优化文件上传9.6 使用Flask-Avatars处理用户头像9.7 图片展示与管理9.8 收藏图片9.9 用户关注9.10 消息提醒9.11用户资料与账户设置9.12 首页与探索…...

【链表】K 个一组翻转链表-力扣 25 题

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…...

jdk17新特性

JDK17新特性 jdk17下载地址:https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe JDK 17 文档 - 首页 (oracle.com) 垃圾回收器(Z Garbage Collector) 概述 JDK17引入名为ZGC(Z Garbage Collector&#x…...

爬虫项目(四):抓取网页所有图片

文章目录 一、书籍推荐二、完整代码三、运行结果 一、书籍推荐 推荐本人书籍《Python网络爬虫入门到实战》 ,详细介绍见👉: 《Python网络爬虫入门到实战》 书籍介绍 二、完整代码 原理:抓取该链接中所有的图片格式。基于seleni…...

短剧推广和小说推文在哪里授权介绍

短剧推广和小说推文都属于很热门的赛道,都可以通过“巨量推文”进行授权 在巨量推文找到想推广的小说或者短剧后申请推广即可,小说需要有回填作品信息,短剧为全自动,出数据后实时同步到平台...

Java:本地文件通过表单参数接口发送后大小变成0

问题 发现一个文件生成以后&#xff0c;如果不通过接口发送&#xff0c;大小就正常&#xff0c;通过接口发送&#xff0c;文件大小就变成0了&#xff0c;发送的文件也是0 空文件 代码 MultiValueMap<String, Object> form new LinkedMultiValueMap<>();FileSyst…...

Linux 共享内存

#include <sys/ipc.h> #include <sys/shm.h> int shmget(key_t key, size_t size, int shmflg);功能&#xff1a;创建一个新的内存段或者获得一个既有的共享内存段的标识。新创建的内存段中的数据都会被初始化为0参数&#xff1a;-key&#xff1a;key_t类型是一个整…...

druid在springboot中如何整合配置!

在Spring Boot中配置Druid作为数据源非常简单。Druid是一个高性能的数据库连接池&#xff0c;它提供了丰富的监控和统计功能&#xff0c;适用于各种数据库。以下是在Spring Boot中配置Druid数据源的步骤&#xff1a; 1. 添加Druid依赖&#xff1a; 首先&#xff0c;您需要在项…...

数据结构:栈

文章目录 栈一&#xff0c;概述二&#xff0c;添加数据三&#xff0c;删除数据 栈 一&#xff0c;概述 栈&#xff08;Stack&#xff09;是一种特殊的线性表&#xff0c;它只允许在一端进行插入和删除操作&#xff0c;通常被称为“后进先出”&#xff08;Last In First Out&a…...

每日刷题-6

目录 一、选择题 二、算法题 1.Fibonacci数列 2.合法括号序列判断 一、选择题 1、 解析&#xff1a;内联函数是一种可以提高函数执行效率的方法&#xff0c;它的原理是编译时在函数调用点直接展开函数体的代码&#xff0c;从而避免了函数调用的开销。 但是&#xff0c;内联函…...

systrace使用注意事项

打开systrace文件报错&#xff1a;Unable to select a master clock domain because no path can be found from “SYSTRACE” to “LINUX_FTRACE_GLOBAL”. 使用systrace生成的trace.html文件无法打开&#xff0c;或者报上面的错误&#xff0c;可以选择下面这个方式&#xff1…...

RockyLinux9.2 网卡配置和nmcli、nmtui命令的使用

NetworkManager NetworkManager 是一个标准的Linux网络配置工具套件&#xff0c;支持服务器&#xff0c;也支持桌面环境&#xff0c; 发展到如今&#xff0c;绝大多数流行的发行版都支持它。 这套网络配置工具适用于 Rocky Linux 8 及更高版本。 nmcli是nm的命令行工具、nmt…...

Java线程池ThreadPoolExecutor应用(Spring Boot微服务)

记录&#xff1a;475 场景&#xff1a;在Spring Boot微服务中使用Java线程池ThreadPoolExecutor。实现Runnable接口提交线程任务到线程池。 版本&#xff1a;JDK 1.8,Spring Boot 2.6.3。 1.使用注解配置线程池ThreadPoolExecutor (1)说明 ThreadPoolExecutor&#xff0c;…...

QT5|C++|通过信号槽机制实现进度条更新

背景&#xff1a;最近在写一个删除90天数据显示进度的功能&#xff0c;实现思路是&#xff1a;通过信号槽捕获当前进度值实现。 备注&#xff1a;点击start按钮&#xff0c;开始更新进度条&#xff0c;直到100&#xff08;每隔1s进行更新&#xff09;举个栗子&#xff1a; 1、…...

什么是智能推荐?智能推荐的原理是什么?

一、智能推荐的魔力 2020年的愚人节晚间&#xff0c;罗永浩在抖音带货&#xff0c;相信你也被刷屏了吧。3小时的直播过程中&#xff0c;22款产品轮番出场&#xff0c;最终首播支付交易总额突破1.1亿、整场直播观看总人数超过4800万、总销售件数逾91万&#xff0c;粉丝打赏音浪…...

Windows下的Elasticsearch-head安装

Windows下的Elasticsearch-head安装 参考&#xff1a;https://gitcode.net/mirrors/mobz/elasticsearch-head 需要用到 npm 命令&#xff0c;这里可以提前下载安装下Node.js 即可自动安装npm&#xff1b; Node.js 下载安装地址&#xff1a;https://nodejs.org/en/download # 进…...

两台服务器间进行文件传输

目录 方法1&#xff1a;使用SCP 方法2&#xff1a;使用rsync 使用SSH密钥 两台服务器之间进行文件传输通常可以使用SCP&#xff08;Secure Copy Protocol&#xff09;或rsync命令。这两种方法都是在UNIX和Linux系统上常用的工具&#xff0c;用于安全地复制文件和目录。以下是…...

研究生选控制嵌入式还是机器视觉好?

研究生选控制嵌入式还是机器视觉好&#xff1f; 我是嵌入式/硬件方向转的算法&#xff0c;现在是公司的算法负责人&#xff0c;如果再让我选一次&#xff0c;我是不会再选嵌入式方 向&#xff0c;嵌入式如果只做技术是没前途的。 你要是有一定自学能力&#xff0c;能自己在学校…...

SecureCRT SSH与FTP连接中文乱码

1、首先要保证服务端环境变量是UTF-8编码的 LANG”zh_CN.UTF-8″ 2、会话里面配置好字符编码&#xff1a;UTF-8 SSH会话的窗口就可以正常显示中文了&#xff0c;效果如下 3、打开FTP或者SFTP时进行文件传输时&#xff0c;列表窗口里面还是乱码&#xff0c;需要把SecureCRT安…...

OSI七层网络参考模型与数据流通过程

OSI七层网络参考模型 文章目录 OSI七层网络参考模型1. OSI参考模型初步了解2. OSI参考模型理解3. 数据流通的过程 1. OSI参考模型初步了解 OSI&#xff0c;英文为Open System Interconnect&#xff0c;意为开放式系统互连&#xff0c;国际化标准组织(ISO)指定了OSI模型&#x…...

数字孪生行业相关政策梳理--工业领域相关政策(可下载)

自2021年国家“十四五”规划纲要提出“探索建设数字孪生城市”以来&#xff0c;国家发展和改革委员会、工业和信息化部、住房和城乡建设部、水利部、农业农村部等部门纷纷出台政策&#xff0c;大力推动数字孪生在千行百业的落地发展。这些政策不仅为数字孪生的应用提供了广阔的…...

【工具】咸鱼之王辅助小助手来了!

自动答题的视频演示&#xff1a;【工具】咸鱼之王辅助小助手来了!_哔哩哔哩_bilibili 刚开始搞&#xff0c;还没来得及做界面&#xff0c;目前只做了自动答题。 欢迎感兴趣的大佬一起来开发~...

黑马JVM总结(十)

&#xff08;1&#xff09;直接内存_基本使用 下面我们看一下使用了ByteBuffer直接内存&#xff0c;大文件的读写效率是非常的高 Java本身并不具备磁盘读写的能力&#xff0c;它需要调用操作系统的函数&#xff0c;需要从java的方法内部调用本地方法操作系统的方法&#xff0c…...

JPEG、GIF动图可以转换成SVG、Eps格式的矢量图吗?

在进行图片设计的过程中&#xff0c;我们可能需要很多不同格式的图片&#xff0c;例如 JPG、PNG、BMP 和 GIF 位图图像&#xff0c;怎么将这些图片转换成矢量图呢&#xff1f;一款功能强大的应用程序&#xff0c;能够轻松将位图图片转换成矢量图输出。Vector Magic会帮你进行自…...

数据结构与算法的力量:编写更高效的代码

文章目录 为什么数据结构和算法重要&#xff1f;1. 提高性能2. 节省资源3. 解决复杂问题4. 改进代码质量 常见数据结构和算法数据结构1. 数组&#xff08;Array&#xff09;2. 链表&#xff08;Linked List&#xff09;3. 栈&#xff08;Stack&#xff09;4. 队列&#xff08;Q…...

Python批量统计pdf中“中文”字符的个数

之前的文章提供了批量识别pdf中英文的方法,详见【python爬虫】批量识别pdf中的英文,自动翻译成中文上。以及自动pdf英文转中文文档,详见【python爬虫】批量识别pdf中的英文,自动翻译成中文下。以及Python统计pdf中英文单词的个数。    本文实现Python统计pdf中中文字符的…...

青岛专业公司网站设计/阿里巴巴运营

偶数求和 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 45797 Accepted Submission(s): 20016 Problem Description有一个长度为n(n<100)的数列&#xff0c;该数列定义为从2开始的递增有序偶数&#xff…...

大连网站设计收费标准/少儿培训

相信大家应该都知道&#xff0c;最近这段时间在网上以及B站上面有一些非常有意思的弹幕&#xff0c;而且看这些弹幕和评论真的是感觉非常的深奥&#xff0c;意思非常的有深意&#xff0c;比如说“人类的悲欢并不相通”&#xff0c;这句话是什么意思呢&#xff1f;下面就和小编一…...

如何利用国外网站做自媒体/新闻头条最新消息30字

原已经安装好的nginx&#xff0c;现在需要添加一个未被编译安装的模块: nginx -V 可以查看原来编译时都带了哪些参数 原来的参数&#xff1a; --prefix/app/nginx 添加的参数: --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module nginx第三方模…...

通过做政府门户网站的实验获得什么/手机百度登录入口

1、首先进入mysql的安装目录下的bin目录&#xff0c;例如我的是【C:\WINDOWS\System32\cmd.exe】2、接着输入cmd&#xff0c;回车3、在命令行中输入命令【mysql -hlocalhost -uroot -p 按回车键&#xff0c;输入密码】&#xff0c;其中【-h主机名 -u用户 -p密码】 4、成功进入界…...

wordpress生成sitemap/广告营销的经典案例

使用EEPROM实现LED状态保存与恢复 当定义和使用变量时,代码中生成的数据仅在Arduino开启时才持续存在。 如果重置或关闭Arduino的电源,则存储的数据将消失。如果要保留数据以备将来使用,则需要使用Arduino EEPROM。 即使Arduino重置或电源关闭,它也会存储变量的数据。 EE…...

简单的手机网址大全/批量优化网站软件

1、JDK &#xff08;Java Development Kit&#xff09;Java开发工具集      从初学者角度来看&#xff0c;采用JDK开发Java程序能够很快理解程序中各部分代码之间的关系&#xff0c;有利于理解Java面向对象的设计思想。JDK的另一个显著特点是随着Java &#xff08;J2EE、J2…...