java jar 环境变量_java-jar jar包带环境变量(参数)启动

需求

java工程我们可以编译成jar也可以翻译成war,一般地,war包我会丢到tomcat容器里,启动tomcat来访问服务,端口、SSL证书、日志等等,都托给tomcat。

如果打的是jar包,我通常会用nohup启动,比如生产环境的一些db、redis、第三方secret等不会配置到项目里,今天要记录的便是用nohup java -jar 启动jar包时如何加载环境变量配置的问题。

java语言开发的jar包启动时可以按照如下方式加启动参数。

方式一:-DpropName=propValue

这种方式应该很快都能找到

-DpropName=propValue

比如:

java -jar -DdatabaseUrl="mysql://localhost:3306/pdb?user=root&password=root" -Dapp.key="123" -Dapp.secret="xxx" demo.jar

多个参数也可以。

方式二:参数直接跟在命令后面,多个参数之间用空格隔开

java -jar demo.jar JOURNAL_TREENODE_DATA-20190404174502.txt processType=1

这种方式参数就是jar包里主启动类中main方法的args参数,按顺序来

方式三:使用springboot的方式,--propName=propValue方式

java -jar demo.jar --spring.profiles.active=dev --server.port=8181

注意:

运行jar包时指定端口:java -jar xxx.jar --server.port=8088

若命令行传入的server.port没有作用,服务仍然使用8081端口启动,原因是spring-cloud-config会覆盖命令行传入的参数,这是有意为之,

办法是在web-prod.yml中做点小改动,让“配置”变得“可配置”:加一对花括符

server.port={port:8081}

用clojure开发的jar里有惊喜

在clojure上面的配置就变得诡异了,猜猜下面的配置能不能生效呢?

java -jar -Ddatabase-url="mysql://localhost:3306/pdb?user=root&password=root" -Dapp.key="123" -Dapp.secret="xxx" demo.jar

如果你用cider-conect通过nrepl的端口连接上你的服务,你会发现,这个配置导致database-url的值确实已经改了,但是后面两个没有。

究其原因,我们java从classpath里获取参数使用的是properties形式的,也就是json的格式。这不难理解,spring有它的办法,clojure当然也有自己的方式。

"app": {

"key": "123",

"secret":"xxx"

}

虽然json和我们的edn里map是很像的,但是毕竟是不同,于是要分析下现在的edn里的配置信息他是怎么读取的呢?

代码里的env

在config这个namespace里找到了env

(defstate env

:start

(load-config

:merge

[(args)

(source/from-system-props)

(source/from-env)]))

cprop加载配置

cprop.source这个文件就是用来加载edn文件的

(defn- env->path [k]

(k->path k "_" #"__"))

(defn read-system-env

([]

(read-system-env {}))

([opts]

(->> (System/getenv)

(map (fn [[k v]] [(env->path k)

(str->value v opts)]))

(into {}))))

从获取的过程看,应该是会把_做为单元节点断开,因此需要改成这样

java -jar -Ddatabase-url="mysql://localhost:3306/pdb?user=root&password=root" -Dapp_key="123" -Dapp_secret="xxx" demo.jar

对应到edn里应该是

{:app

{:key "123"

:secret "xxx"}}

如果仔细看看cprop这个库就不难理解了。

cprop加载配置文件的顺序是 :

By default cprop will merge all configurations it can find in the following order:

classpath resource config

file on a file system (pointed by a conf system property or by (load-config :file ))

custom configurations, maps from various sources, etc.

System properties

ENV variables

对于ENV的加载也有明确说明

ENV variables lack structure. The only way to mimic the structure is via use of an underscore character. The _ is converted to - by cprop, so instead, to identify nesting, two underscores can be used.

了解更多详情,请阅读cprop介绍

我的期望

像上面的命令如果有20个参数需要在启东时指定,估计看那个命令就疯了,那能不能在启东时指定一个配置文件,比如prod-config.edn之类的呢?我没有找到,如果有就更方便了。

参考

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

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

相关文章

java单列_Java 单例模式

单例模式保证一个类只有一个实例,并且提供一个访问该实例的全局访问点常见的应用场景:任务管理器。回收站。网站的计数器。操作系统的文件系统。在servlet编程中,每个servlet也是单例模式,项目中,读取配置文件的类&…

python字符串索引必须是整数_TypeError:在Python中,字符串索引必须是整数

我想从currency converter API得到的Json响应中获取key和value,得到一个错误:“of string index must be integers”。下面是Python代码、Json中的数据和错误消息。在import jsonfrom urllib.request import urlopenwith urlopen ("http://free.cur…

java 数字图片识别_java – 识别图像中的数字

您很可能需要执行以下操作:>在整个页面上应用Hough Transform算法,这应该会产生一系列页面部分。>对于您获得的每个部分,请再次应用。如果当前部分产生2个元素,那么你应该处理类似于上面的矩形。>完成后,您可…

python的基础命令_Python必学之命令行常用的命令

打开命令行,我们会看到每行前面都有诸如C:\Documents and Settings\Crossin>或者MyMacBook:~ crossin$之类的。这个提示符表示了当前命令行所在目录。在这里,我们输入python就可以进入python环境了。但今天我们暂时不这么做。第一个常用的命令是&…

内存泄漏java例子_一次线上Java应用内存泄漏分析实例

由于JVM的内存管理采用GC垃圾自动回收机制,这使得Java程序员在编程的时候确实可以从内存管理中释放出来,但这也引发了另外一个大问题,一旦Java应用出现内存泄漏的时候,常常让人措手不及,陷入无从下手的尴尬境地&#x…

python比较列表所有项是否有相同的部分_检查列表中的所有元素是否相同

一般方法&#xff1a;def checkEqual1(iterator):iterator iter(iterator)try:first next(iterator)except StopIteration:return Truereturn all(first rest for rest in iterator)单线&#xff1a;def checkEqual2(iterator):return len(set(iterator)) < 1还有一条线&…

java项目管理工具_Java 开发项目管理工具

团队协同工具(worktil):https://worktile.com/版本管理工具(GitLab)&#xff1a;http://www.tuicool.com/articles/bEz6Vf 配置教程&#xff1a;http://www.cnblogs.com/wintersun/p/3930900.html自动化构建工具(jenkins)&#xff1a;http://jenkins-ci.org/ 配置教程&#xff…

python判断是不是整数的命令_介绍python判断一个数是不是正小数和整数的方法

这篇文章主要介绍了python 判断是否为正小数和正整数的实例的相关资料,这里提供实例&#xff0c;实例注释说明很清楚&#xff0c;需要的朋友可以参考下python 判断是否为正小数和正整数的实例实现代码&#xff1a;def check_float(string):#支付时&#xff0c;输入的金额可能是…

.net core 2.1 mysql_ASP.NET Core 2.2 + MySQL + DB First

1 项目添加 Pomelo.EntityFrameworkCore.MySql2 编辑项目文件&#xff0c;在节点中添加如下代码&#xff1a;netcoreapp2.2InProcess3 CMD 切换到当前项目目录&#xff0c;执行如下命令dotnet ef dbcontext scaffold "Serverlocalhost;User Id数据库访问用户;Password数据…

java 向上抛异常_java throws 向上抛出的概念问题

展开全部------------------附注------------------------向上抛出的意思 针对 子类 父类,这里面涉及到几个方面,最重32313133353236313431303231363533e4b893e5b19e31333332613637要的一点,(先抛子类的异常,再抛父类的异常.)(FALSE)如果在该方法写明catch子句,catch的顺序是子…

windows linux cpu 抢占式 时间片_嵌入式Linux中进程调度怎样来解析

合作微信&#xff1a;xydf321456Linux是一套免费使用和自由传播的类Unix操作系统&#xff0c;是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。1.前言处理机&#xff08;CPU&#xff09;是整个计算机系…

java 堆内存分析_JVM内存堆布局图解分析

JAVA能够实现跨平台的一个根本原因&#xff0c;是定义了class文件的格式标准,凡是实现该标准的JVM都能够加载并解释该class文件&#xff0c;据此也可以知道&#xff0c;为啥Java语言的执行速度比C/C语言执行的速度要慢了,当然原因肯定不止这一个&#xff0c;如在JVM中没有数据寄…

python生成奇数列表_python3:列出一个不需要迭代的奇数列表

您可以使用range为您生成列表&#xff1a;first_hundred_odd list(range(1, 200, 2)) # get an iterator in 1..200 range with step of 2在Python2.x上不需要将其转换为列表更新&#xff1a;是的&#xff0c;将range()迭代器转换为list实际上是在执行迭代来填充列表&#xff…

wpf表格datagrid拖动列_这才是老板要的Excel表格,你做的太丑了!

在网上看到一个高手做的Excel表格&#xff0c;非常的漂亮&#xff0c;今天我们一起仿做一下。原始的表格&#xff0c;再熟悉不过的样式&#xff1a;完成后的效果&#xff0c;是不是有让你颠覆三观的感觉&#xff1f;同样的数据&#xff0c;不同的展示方式&#xff0c;后者不但好…

java同步转化成异步_Java 如何把异步调用模拟成同步调用

在某些时候&#xff0c;须要把异步调用模拟成同步调用的形态。例如&#xff0c;基于基于异步通讯的客户端须要同步调用。 :-)异步要实现这个转换&#xff0c;能够有多种实现方法&#xff1a;this1。很经常使用的方法&#xff0c;应用循环机制&#xff1a;spaboolean flag fals…

python系统自学_如何系统地自学python

可以按照黑马程序员整理的这套教程来学习:一、Python入门这一阶段,你需要学习的知识点:如果学习能力还不错的话,这一阶段,只需要一个多月的时间Python视频教程:1、重磅级教程推荐,讲的非常好Python入门教程完整版(懂中文就能学会):http://pan.baidu.com/s/1miwZ1WW2、Python基础…

java实现加减乘除运算符随机生成十道题并判断对错_简单小程序——产生三十道小学四则运算题目...

题目要求程序可以生成三十道小学四则运算题目。因为要随机生成题目&#xff0c;则需要产生随机数&#xff0c;因此我上网搜索了生成随机数的方法&#xff0c;选择了使用Random类得到规定范围内的随机数。因为一个运算需要三个元素&#xff0c;两个参与运算的数字&#xff0c;一…

proteus跑马灯仿真_不花费一分钱,实现跑马灯编程实验

建立仿真工程初学者学习单片机编程&#xff0c;并不需要去网上买个开发板才能开始编程做实验&#xff0c;若是想先了解&#xff0c;可以先用proteus仿真软件来做实验&#xff0c;Protues软件具有其它EDA工具软件的功能。这些功能是&#xff1a;1&#xff0e;原理布图2&#xff…

java异常 说服力_异常常见面试题目

1) Java中什么是Exception?这个问题经常在第一次问有关异常的时候或者是面试菜鸟的时候问。我从来没见过面高级或者资深工程师的时候有人问这玩意&#xff0c;但是对于菜鸟&#xff0c;是很愿意问这个的。简单来说&#xff0c;异常是Java传达给你的系统和程序错误的方式。在ja…

linux下python脚本print中文显示不正确_在终端上运行python脚本,没有打印或显示-为什么?...

通过艰苦的学习Python&#xff0c;第25课。我尝试执行脚本&#xff0c;结果如下&#xff1a;myComp:lphw becca$ python l25myComp:lphw becca$终端中不打印或显示任何内容。这是密码。def breaks_words(stuff):"""This function will break up words for us.&q…