【运维篇】二、配置文件与多环境控制
文章目录
- 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
问题 发现一个文件生成以后,如果不通过接口发送,大小就正常,通过接口发送,文件大小就变成0了,发送的文件也是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);功能:创建一个新的内存段或者获得一个既有的共享内存段的标识。新创建的内存段中的数据都会被初始化为0参数:-key:key_t类型是一个整…...
druid在springboot中如何整合配置!
在Spring Boot中配置Druid作为数据源非常简单。Druid是一个高性能的数据库连接池,它提供了丰富的监控和统计功能,适用于各种数据库。以下是在Spring Boot中配置Druid数据源的步骤: 1. 添加Druid依赖: 首先,您需要在项…...
数据结构:栈
文章目录 栈一,概述二,添加数据三,删除数据 栈 一,概述 栈(Stack)是一种特殊的线性表,它只允许在一端进行插入和删除操作,通常被称为“后进先出”(Last In First Out&a…...

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

systrace使用注意事项
打开systrace文件报错:Unable to select a master clock domain because no path can be found from “SYSTRACE” to “LINUX_FTRACE_GLOBAL”. 使用systrace生成的trace.html文件无法打开,或者报上面的错误,可以选择下面这个方式࿱…...
RockyLinux9.2 网卡配置和nmcli、nmtui命令的使用
NetworkManager NetworkManager 是一个标准的Linux网络配置工具套件,支持服务器,也支持桌面环境, 发展到如今,绝大多数流行的发行版都支持它。 这套网络配置工具适用于 Rocky Linux 8 及更高版本。 nmcli是nm的命令行工具、nmt…...
Java线程池ThreadPoolExecutor应用(Spring Boot微服务)
记录:475 场景:在Spring Boot微服务中使用Java线程池ThreadPoolExecutor。实现Runnable接口提交线程任务到线程池。 版本:JDK 1.8,Spring Boot 2.6.3。 1.使用注解配置线程池ThreadPoolExecutor (1)说明 ThreadPoolExecutor,…...
QT5|C++|通过信号槽机制实现进度条更新
背景:最近在写一个删除90天数据显示进度的功能,实现思路是:通过信号槽捕获当前进度值实现。 备注:点击start按钮,开始更新进度条,直到100(每隔1s进行更新)举个栗子: 1、…...

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

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

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

EEG-fNIRS联合成像在跨频率耦合研究中的创新应用
摘要 神经影像技术对医学科学产生了深远的影响,推动了许多神经系统疾病研究的进展并改善了其诊断方法。在此背景下,基于神经血管耦合现象的多模态神经影像方法,通过融合各自优势来提供有关大脑皮层神经活动的互补信息。在这里,本研…...

Copilot for Xcode (iOS的 AI辅助编程)
Copilot for Xcode 简介Copilot下载与安装 体验环境要求下载最新的安装包安装登录系统权限设置 AI辅助编程生成注释代码补全简单需求代码生成辅助编程行间代码生成注释联想 代码生成 总结 简介 尝试使用了Copilot,它能根据上下文补全代码,快速生成常用…...
Easy Excel
Easy Excel 一、依赖引入二、基本使用1. 定义实体类(导入/导出共用)2. 写 Excel3. 读 Excel 三、常用注解说明(完整列表)四、进阶:自定义转换器(Converter) 其它自定义转换器没生效 Easy Excel在…...