Java 运行jar包变更配置文件与变量

news2024/12/23 19:16:46

文章目录

  • 前言
  • 实现原理
  • 不同环境的配置文件
  • 变更配置变量


前言

为实现快速搭建和开发,项目以Springboot框架搭建,springboot搭建的项目可以将项目直接打成jar包并运行,无需自己安装配置Tomcat或者其他服务器,是一种方便快捷的部署方式。

假设项目以最常规的方式打包成一个整体的jar包部署,即配置文件包含在jar包里,就会出现一个问题:项目运行过程中,要改动配置文件的话需要重新打包并部署。

如果将项目的配置文件提取到jar包外统一管理,这样只改动了配置文件重启下服务就可以了,无需重新构建部署。


实现原理

  • Springboot的默认配置文件为:application.properties或者是application.yml
  • 如果这两个配置文件都存在,不冲突的话,就互相补充。冲突的话,则properties优先级高。

根据yml配置文件加载原理,所有配置文件都会加载,高优先级的配置会覆盖低优先级的内容,且属性互补

Springboot配置文件加载优先级:

1.项目启动时通过命令的方式指定项目加载核心配置文件
2.Jar包外同级目录的config目录
3.Jar包外同级目录
4.jar包内classPath(即resources目录)的config目录
5.jar包内的classpath目录

不同环境的配置文件

当我们使用IDEA创建出一个Springboot项目上时,配置文件默认出现在classpath(也就是项目里的resources)目录下。使用多套配置环境,如图:

在这里插入图片描述

在application.yml中指定使用哪一个文件(开发用dev,测试环境用uat,正式环境用prod)

开发的时候,默认使用dev环境,端口为8080,即使发布也无需更改环境配置,下文讲解。

application.yml文件

spring:
  profiles:
    active: dev # 使用dev开发环境配置

server:
  port: 8080
  

application-dev文件

# 开发环境
app:
  env: dev

logging:
  config: classpath:log4j2-dev.xml
  

application-uat.yml文件

# 测试环境
app:
  env: uat
  
logging:
  config: classpath:log4j2-uat.xml
  

以测试环境为例,当我们在测试环境运行jar包,指定uat环境启动jar包,使用以下命令,便可将配置环境切换为application-uat.yml文件:

java -jar demo.jar --spring.profiles.active=uat

指定启动端口为8081:

java -jar demo.jar --spring.profiles.active=uat --server.port=8081

以上这种指定配置文件的方式似乎能帮助我们更好的开发,却不能满足于正式环境的需求变动,我们所需的是动态修改配置文件的内容,从而快速的变更需求,那么就需要以下这种方式。

变更配置变量

还是在测试环境,以切换日志配置文件为例,将测试环境的日志配置文件切换为开发环境的配置文件。

写一个新的配置文件放在 config 文件夹:

在这里插入图片描述

config 文件夹如下:

在这里插入图片描述

application-uat.yml文件的内容如下:

logging:
  config: classpath:log4j2-dev.xml
  

重启服务,运行命名参数为 --spring.profiles.active=uat ,测试服务器原来加载的日志配置文件log4j2-uat.xml便变更为开发环境的配置文件 log4j2-dev.xml

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

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

相关文章

PDF怎么转换成Excel?两个实用的方法给你!

如何将PDF文件转换成Excel表格的格式呢?在日常办公中,我们经常会遇到需要将PDF文件转换成Excel表格的情况。由于PDF文件具有稳定的格式特征,很多时候我们下载或接收到的文件都是以PDF格式呈现。那么,当我们需要使用Excel表格格式时…

数据结构--字符串的KMP算法

数据结构–字符串的KMP算法 朴素模式匹配算法: 一旦发现当前这个子串中某个字符不匹配,就只能转而匹配下一个子串(从头开始) 但我们可以知道: 不匹配的字符之前,一定是和模式串一致的 \color{red}不匹配的字符之前,一…

C++中内存拷贝函数memcpy函数使用

函数原型&#xff1a;void *memcpy(void *dest, const void *src, size_t n); 头文件&#xff1a;#include<string.h> 功能&#xff1a; 从源 src 所指的内存地址的起始位置开始拷贝 n 个字节到目标 dest 所指的 内存地址的起始位置中&#xff08;将一个 内存块 的内容…

哪种类型耳机不伤耳朵,分享几款佩戴无需入耳的骨传导耳机

骨传导耳机是目前在运动领域最火热的产品&#xff0c;也是最适合运动的耳机&#xff0c;它的原理是通过颅骨将声音转化为神经冲动&#xff0c;通过内耳传至听觉中枢&#xff0c;因此不会对耳朵造成任何损伤&#xff0c;它同时也可以让耳朵更好地听到周围的声音。能够很好的提高…

100天精通Golang(基础入门篇)——第12天:深入解析Go语言中的集合(Map)及常用函数应用

&#x1f337; 博主 libin9iOak带您 Go to Golang Language.✨ &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &#x1f30a; 《I…

Linux0.11内核源码解析-char_dev.c

目录 概述 串口终端设备 控制台终端 内存 调用接口 概述 char_dev.c文件包括字符设备文件访问函数&#xff0c;主要是有rw_ttyx(),rw_tty(),rw_memory()和rw_char()函数&#xff0c;另外还有一个设备读写函数指针表 串口终端设备 rw_ttyx()是串口终端设备读写函数&#x…

Process Explorer高级使用

工具描述 Process Explorer使用个轻量级的进程管理器&#xff0c;是由Sysinternals出品的免费工具&#xff0c;请猛击这里下载最新版本使用。 以下是官方介绍的翻译&#xff1a; “想知道是那个程序打开了某个文件或者目录么&#xff1f;现在可以找出它了。PorcessExplorer将…

三、pycharm开发PyQt6 开发环境一键生成

一、环境 windows 10Pycharm 社区版 - PyCharm 2022.1.3 二、设置模板 1、打开模板 File -> Settings… (ctrl alt s) -> Editor -> File and Code Templates 2、创建模板 1&#xff09;点击 Files 2&#xff09;点击 3、填写第一个脚本文件 Name : My PyQt…

ReentrantLock源码解析 | 京东云技术团队

并发指同一时间内进行了多个线程。并发问题是多个线程对同一资源进行操作时产生的问题。通过加锁可以解决并发问题&#xff0c;ReentrantLock是锁的一种。 1 ReentrantLock 1.1 定义 ReentrantLock是Lock接口的实现类&#xff0c;可以手动的对某一段进行加锁。ReentrantLock…

hadoop高校固定资产管理系统-计算机毕设 附源码74965

hadoop高校固定资产管理系统 摘 要 在信息飞速发展的今天&#xff0c;网络已成为人们重要的信息交流平台。高校部门每天都有大量的信息需要通过网络发布&#xff0c;为此&#xff0c;高校固定资产管理系统开发的必然性&#xff0c;所以本人开发了一个基于Tomcat&#xff08;服务…

SpringBoot整合Schedule详解和优化实战

文章目录 前言为什么选择Spring ScheduleCron表达式简单示例测试结果优化方案 前言 Spring Schedule是Spring框架提供的一种简单的定时任务解决方案。它是基于Java的Scheduled注解&#xff0c;可以让我们在不影响主线程的情况下&#xff0c;定时、周期性地执行任务。 为什么选…

vue+ant design vue实现搜索区域form

1.要实现的效果&#xff1a; form部分form-item自动铺开&#xff0c;间距适当&#xff0c;屏幕大小不同能根据屏幕大小变化。 2.vue组件中的代码示例 重点html代码&#xff1a; <!-- 搜索区域 --><div class"table-page-search-wrapper"><a-form la…

vue 七款低代码平台对比

vue 七款低代码平台对比 摘要平台表单设计form-generatorLowCodeEngine 可视化设计OpenDataVGoView 门户设计AgileBPM轻流云程低代码平台 摘要 调研低代码平台时看了很多网站&#xff0c;被我大概分为了三种&#xff1a;页面设计、可视化设计、门户设计&#xff0c;其中功能也…

【vue3中使用swiper组件】

【vue3中使用swiper组件】超详细保姆级教程 效果展示简介版本安装Swiper用法完整代码展示html静态展示js逻辑展示&#xff08;vue3 --- ts&#xff09;官方文档导入模块 css样式展示 &#xff08;自行更改所需&#xff09;官方文档样式 效果展示 简介版本 安装Swiper 项目终端中…

Observability:Synthetic monitoring - 合成监测入门

从我们的全球测试基础设施监控关键用户旅程&#xff0c;并了解网络和前端性能对用户体验的影响。 全面了解你的网站性能、功能和可用性&#xff08;从开发到生产&#xff09;&#xff0c;并在客户之前发现问题。合成监测&#xff08;synthetic monitoring&#xff09;使你能够模…

关于表单提交

一、表单实例 <!-- 把表单信息放入到表格当中&#xff0c;显示的内容更加整齐 --><form action"" method"get"><h1 align"center">用户注册</h1><input type"hidden" name"action" value"l…

正则表达式 - 语法 | 一看就懂!!!(二)

目录 一、正则表达式 - 语法 二、普通字符 三、非打印字符 四、特殊字符 五、限定符 &#xff08;一&#xff09;限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种。 &#xff08;二&#xff09;正则表…

Eureka注册失败解决

根据查看网上资料发现是服务端自己自己注册了&#xff0c;所以需要自己关闭服务端注册 加上两行代码 fetch-registry: false register-with-eureka: false 即可注册成功

初级保育员专业知识生活管理考试题库及答案

​本题库是根据最新考试大纲要求&#xff0c;结合近年来考试真题的重难点进行汇编整理组成的全真模拟试题&#xff0c;考生们可以进行专项训练&#xff0c;查漏补缺巩固知识点。本题库对热点考题和重难点题目都进行了仔细的整理和编辑&#xff0c;相信考生在经过了针对性的刷题…

「深度学习之优化算法」(八)萤火虫算法

1. 萤火虫算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读) 萤火虫算法(Firefly Algorithm,FA)是一种模仿萤火虫之间信息交流,相互吸引集合,警戒危险。算法的原理简单,但实现过程较为复杂,而且算法的提出时间不长,算法的改进、优化处于初级阶段,国内外相应的…