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

2023-11-01


前言

为实现快速搭建和开发,项目以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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 运行jar包变更配置文件与变量 的相关文章

  • SLF4J - Logback:如何在运行时配置记录器?

    我们在项目中使用 LogBack 我想根据一些数据库值配置记录器 即如果某个数据库值设置为 true 则记录器应同时使用文件和数据库附加程序 如果为 false 则记录器必须仅使用数据库附加程序 我还想保留使用静态最终记录器 因此我不会在每
  • 将用户库添加到 Ant Builder 类路径

    我在为 Eclipse 项目设置 Ant Builder 时遇到问题 我确实在 Eclipse 中将几个第 3 方库配置为用户库 这些库已添加到我的项目的构建路径中 一切正常 我的问题是 如果我想从 Eclipse 使用 Ant Build
  • Java:BufferedReader readLine() 中的 IOEXception 有何用途?

    我可以使用 try catch 循环 修复 以下异常 但我无法理解原因 为什么 in readLine 部分会不断引发IOExceptions 抛出此类异常的真正目的是什么 目标可能不仅仅是更多副作用 代码和 IOException jav
  • 使 TreeMap 比较器容忍 null

    这个定制的 Valuecomarator 按其值对 TreeMap 进行排序 但在搜索 TreeMap 是否具有某个键时 它不能容忍 nullpointException 如何修改比较器来处理零点 import java io IOExce
  • 使用 Java NIO 直接访问 Windows 磁盘

    我正在使用一个使用 Java NIO 的库来直接将文件映射到内存 但我在直接读取磁盘时遇到问题 I can直接使用读取磁盘FileInputStream与 UNC 合作 例如 File disk new File PhysicalDrive
  • 通过 JDBC 调用 Sybase 存储过程时结果集为空

    我正在调用一个通过 JDBC 返回多个结果集的 Sybase 存储过程 我需要获取一个特定的结果集 其中有一列名为 结果 这是我的代码 CallableStatement cs conn prepareCall sqlCall cs reg
  • Android 背景 + 文本 + 按钮图标

    我想要一个图像设置为文本的背景 并在文本的左侧设置一个图标 在iPhone中非常简单 但不知道如何在Android上做到这一点 调整按钮的大小并保持图标 文本的位置和距离正确 iPhone 安卓我有这个 xml代码是
  • Hibernate HQL 查询:如何将集合设置为查询的命名参数?

    给定以下 HQL 查询 FROM Foo WHERE Id id AND Bar IN barList I set id使用查询对象的setInteger 方法 我想设置 barList用一个List对象 但查看 Hibernate 文档和
  • Apache POI 的 ProGuard 设置

    我正在构建一个使用 Apache POI 库的应用程序 当我调试应用程序 在不运行 Proguard 的情况下编译它 时 一切都运行良好 但是在导出 APK 后 当我运行应用程序并打开 Excel 文件时 出现以下异常 RuntimeExc
  • 用dagger 2查看依赖注入

    我有一个自定义视图扩展TextView 我应该在哪里调用我的组件来注入视图 component inject customTextView 因此 我发现我需要在自定义视图的构造函数中添加注入 在所有视图中 或者使一个调用另一个 Exampl
  • 用 Java 捕获扬声器输出

    使用Java可以捕获扬声器输出吗 此输出不是由我的程序生成的 而是由其他正在运行的应用程序生成的 这可以用 Java 完成还是我需要求助于 C C 我有一个基于 Java 的应用程序 使用过的爪哇声音 https stackoverflow
  • 在java中将jpeg/png转换为像素数组

    如何将包含 jpeg 或 png 的字符串转换为像素数组 最好是一维 理想情况下使用java内置的类 原来你需要公共文件上传 http commons apache org fileupload 看着那 这用户指南 http commons
  • 使用 Spring 注入 Google Guava Hashmultimap

    是否可以提供一个创建示例Multimap
  • Hibernate3:自引用对象

    需要一些帮助来了解如何执行此操作 我将在文件系统上运行递归 查找 并且希望将信息保留在单个数据库表中 具有自引用的层次结构 这是我想要填充的数据库表结构 目录对象表 id int NOT NULL name varchar 255 NOT
  • 如何在其他窗口之上生成独立的 JFileChooser 对话框?

    Like 其他一些人 https stackoverflow com questions 4161207 javavm windows 7 64bit jfilechooser not showing dialog box谁问过类似的问题
  • 使用 colt java lib 时出现“矩阵太大”异常

    我正在使用 cern colt matrix lib 进行稀疏矩阵计算 但似乎我一直遇到此错误 线程 main 中的异常 java lang IllegalArgumentException 矩阵太大 我认为这是因为构造函数在 nrows
  • Java可以进行进程监控吗?

    是否可以用Java编写一个在托盘中运行的应用程序 并且当启动某个应用程序时 它可以检测到它 我想对某些程序执行此操作 以了解我每周使用它们多长时间 我是 Java 新手 所以我不知道 Java 是否是最适合此操作的语言 或者它是否具有对操作
  • Jersey bean 验证 ParameterNameProvider

    我正在阅读关于泽西岛的文档Bean验证 https jersey java net documentation latest bean validation html The ParameterNameProvider示例显示如何定义方法的
  • Selenium Webdriver 中的 IF 语句

    我想知道是否有人可以帮助我解决我正在尝试解决的问题以及 Java 中 Webdriver 的 If 语句 当登录到我正在测试的应用程序时 可以在主页之前进入安全问题页面 如果是新用户等 我希望测试中的代码做的是 如果出现安全问题页面 请填写
  • 如何使用 JRE 部署 JavaFX 11 桌面应用程序

    我有一个 JavaFX JDK 8 桌面业务应用程序 它使用 Java Web Start 进行部署 用户安装了 Java 8 只需访问 URL 我的 AWS Linux 服务器上的公共 URL 即可下载 启动应用程序 使用 Web Sta

随机推荐

  • 微信小程序------联动选择器

    2019独角兽企业重金招聘Python工程师标准 gt gt gt picker 从底部弹起的滚动选择器 现支持五种选择器 通过mode来区分 分别是普通选择器 多列选择器 时间选择器 日期选择器 省市区选择器 默认是普通选择器 先来看看效
  • VM12+CentOS6.5+hadoop2.7.3 搭建hadoop完全分布式集群

    参考 http blog csdn net gamer gyt article details 51991893 一 安装VM 12 x 下载地址 链接 http pan baidu com s 1c2KA3gW密码 3r67 二 安装Ce
  • 移动端 - 搜索组件(suggest篇)

    这一篇博客是和 search input篇 衔接的 需要的可以看上文 移动端 搜索组件 search list篇 这里我们需要去封装这么一个组件 先说一下大致的方向 1 根据父组件传入的关键字数据发送请求获取后端数据 进行模板渲染 2 处理
  • Kettle中调用用户自定义的jar包

    在使用kettle过程中 有些功能是kettle不提供的 这样就需要想办法 不过kettle中的java代码可以解决大部分问题 下边就展示使用java代码组件调用自己编写的jar包的过程 1 创建java jar包 package test
  • GL分数阶微积分

    目录 预备公式 将积分和导数统一 p lt 0表示积分 p gt 0表示导数 整数阶和分数阶混合运算 分数阶和分数阶混合运算 预备公式 z
  • javascript的window.location方法

    Response Write 或 Response Write 退后操作 Response Write
  • 备案域名绑定服务器后 提示需要备案_小程序开发需要多少钱?

    现在越来越多的企业想通过微信小程序来宣传产品 为什么小程序那么火爆呢 奥晶科技为您解答 其优点不言而喻 1 小程序建设的成本比APP建设成本低 2 小程序能紧跟市场发展潮流 随时更新功能 3 小程序用户广泛 依托微信的亿万用户 接入方便 用
  • Linux下gdb调试工具的使用

    gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具 gdb主要完成四个方面的功能 1 启动你的程序 可以按照你的自定义的要求随心所欲的运行程序 2 可让被调试的程序在你所指定的调试的断点处停住 断点可以是条件表达式 3 当程序
  • 在ubantu下cmake与make命令的简单使用

    ubantu下简单的使用cmake与make的使用 Step 1 新建一个可执行程序 首先确保你已经安装了cmake 和 g 如果没有安装 就 sudo apt get install cmake g 然后准备一个工作空间 并准备一些素材
  • 当大模型不是问题时,如何应对 LLM 的工程化落地挑战?

    几个月前 在 Thoughtworks 的内部 AIGC 研讨会里 我们一直达成了一系列一致观点 诸如于 如果没有 开源模型 降低企业应用 LLM 的成本 那么 LLM 会很快消亡 所以 我们相信开源 LLM LoRA 微调会成为企业的一种
  • Java AES加密解密报错 “java.security.InvalidKeyException: Illegal key size”

    项目中正常都会用到AES加密解密的问题 因为有的时候来不及设置公钥私钥 搞不对称加密 这种对称加密相对来说是比较方便的一个加密方式 与Base64比 AES相对来说破解难度要更高一些 同样你也可以往里面加盐 参与加密加强密码安全程度 但是问
  • java里的ClassNotFoundException

    1 Caused by java lang ClassNotFoundException org springframework security oauth2 common util RandomValueStringGenerator
  • 把浏览器中的页面数据下载为pdf

    把浏览器中的页面数据下载为pdf 页面样子 https img blog csdnimg cn 7c0f58887b6c40fe8a7112800e9a8c93 png 下载后效果 只是内容不一致而已 样式差不多 文章目录 把浏览器中的页面
  • win10telnet配置和telnet用法

    Telnet协议 Telnet协议是TCP IP协议族中的一员 是Internet远程登录服务的标准协议和主要方式 它为用户提供了在本地计算机上完成远程主机工作的能力 在终端使用者的电脑上使用telnet程序 用它连接到服务器 终端使用者可
  • curl源码编译安装

    https curl haxx se download html 首先去curl官网下载对应版本 这里有个坑需要注意 如果下载的源码版本太高 编译是成功的 但是curl可执行文件访问https的时候还是会报各种奇怪的错误 所以我这里的做法是
  • No module named ‘typing_extensions‘

    No module named typing extensions 在运行程序时出现如下报错 解决方法 在运行程序时出现如下报错 File E Anaconda install Dic envs python38 lib site pack
  • nginx try_files用法 及Nginx location的一些配置

    实例 Yii2推荐ngnix try files配置 location try files uri uri index html args 找指定路径下文件 如果不存在 则转给哪个文件执行 try files 语法 try files fi
  • Java 内存模型(JMM),一看就懂 清晰明了

    一 线程私有的内存区域 1 程序计数器 当前线程所执行的字节码的行号指示器 字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令 它是程序控制流的指示器 2 虚拟机栈 线程调用 Java 方法时 每个方法每次调用都会
  • 基于形状的模板匹配来寻找稍微变形的图像

    方案 直接用整幅图像做模板匹配 下面是过程 原图 创建模板 下图是模板的轮廓 需要识别的图像 识别结果 代码 dev update off read image ModelImage food cocoa package model dev
  • Java 运行jar包变更配置文件与变量

    文章目录 前言 实现原理 不同环境的配置文件 变更配置变量 前言 为实现快速搭建和开发 项目以Springboot框架搭建 springboot搭建的项目可以将项目直接打成jar包并运行 无需自己安装配置Tomcat或者其他服务器 是一种方