jar运行命令(讲解java部署jar还是war优劣)

   2023-02-24 互联网0
核心提示:现在Java Web开发一般都是用Springboot框架,部署应用时使用Jar包(Java ARchive),也就是Java归档文件,而不是使用War包(打包格式的Java web工程)。 War包结构 Jar包和War包的主要区别就在

jar运行命令(讲解java部署jar还是war优劣)

现在Java Web开发一般都是用Springboot框架,部署应用时使用Jar包(Java ARchive),也就是Java归档文件,而不是使用War包(打包格式的Java web工程)。

War包结构

Jar包和War包的主要区别就在于Jar包内部已经集成了Tomcat服务器,War包部署还需要先安装一个Tomcat服务。用jar部署java服务更加方便,也是大势所趋。在Linux服务器上部署完Jar包程序以后,该如何启动服务和停止服务呢?

Jar包的启动

在主机上先配置好Java的环境变量,之后就可以用java命令启动Jar包:

java -jar xxx.jar

在启动jar包的时候,通常需要设置很多与内存有关的参数,要详细了解Java启动内存参数,可以阅读前文《Java面试常见问题:JVM内存异常及内存参数设置》。常用的内存配置参数包括:

-XX: metapaceSize 设置元空间大小的初始值; -XX:MaxmetaspaceSize 设置元空间大小的最大值; -Xms 设置堆内存的初始值; -Xmx 设置堆内存的最大值; -Xmn 设置新生代的大小; -Xss 设置栈区的大小; -XX:SurvivorRatio 设置新生代中Eden区域和Survivor区域的比例,默认为8 -XX:+UseConcMarkSweepGC 设置垃圾回收器为并发标记清除(Concurrent Mark Sweep)垃圾回收器。

这样在Jar包的启动命令中要把所有参数都配置好,可要写不少字。

java -jar -XX:metaspaceSize=128m -XX:MaxmetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC xxxService.jar

为了避免每次启动都打这么多字,我们可以把这一长串启动命令放在Shell脚本中运行。要启动Jar包服务只需要运行脚本就行。

Jar包启动脚本

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux/Unix系统的桥梁,有好多种不同版本的Shell。Ken Thompson 开发的 sh Shell是第一个 Unix Shell。

美国计算机科学学者Kenneth Lane Thompson,1983年图灵奖得主,C语言前身B语言的作者,Unix发明人之一

在Linux上,最常用的Shell程序就是 bash。bash保持了对 sh Shell 的兼容性,是各种 Linux 发行版默认配置的 shell。下面我们就看一下如何用shell脚本实现Jar包启动。

#!/bin/shAPPDIR=`pwd`PIDFILE=$APPDIR/xxxService.pidif [ -f "$PIDFILE" ] && kill -0 $(cat "$PIDFILE"); thenecho "xxxService is already running..."exit 1finohup java -jar -XX:metaspaceSize=128m -XX:MaxmetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC xxxService.jar > out.file 2>&1 & echo $! > $PIDFILEecho "start xxxService success..."

第一行脚本是说明shell程序所在的位置,基本上Linux系统都是一样的。

第二行脚本是用pwd指令获取当前路径。通常我们把这个shell脚本和Jar包文件会放在一个路径下,要特别注意pwd上面的不是单引号,而是键盘左上角的“点号”。APPDIR就是脚本所在的当前路径了。

第三行脚本定义了变量PIDFILE,指向文件名xxxService.pid,这个文件就是用来记录Jar包启动后的进程ID。这样将来就可以用进程ID来关闭Jar包服务了。

第四行脚本是判断是否xxxService程序已经运行了。

[-f “$PIDFILE”]是查询pid文件是否存在。 cat “$PIDFILE”是打印pid文件内容,也就是进程ID。 kill -0 pid的意思并不是要杀死进程,而是让系统来对进程进行检查,如果进程不存在,kill -0会报错。

第5行到第7行脚本的含义:如果pid文件存在且对应进程也存在,那么说明Jar包已经启动了,不需要再重新启动,脚本退出运行。

如果Jar包尚未启动,则运行第8行脚本。省略掉Java启动内存设置参数,就是下面这样:

nohup java -jar xxxService.jar > out.file 2>&1 & echo $! > $PIDFILE

nohup 意思是不挂断运行命令,当账户退出或终端关闭时,程序仍然运行。 >outfile 代表输出重定向,程序运行时的标准输出内容都会打印到out.file上。 2>&1 就是将标准错误重定向到标准输出。标准输出已经到了out.file上,因此错误也会输出到这个文件上面。如果不希望记录标准输出和错误,可以重定向到/dev/null上,因为 /dev/null 是一个不存在的设备,从这里什么也读不出来。 &代表在后台运行,echo $! > $PIDFILE 则是把进程ID输出到pid文件上。

第8行脚本执行成功后,第9行脚本打印成功。另外我们还可以在当前目录下发现多了一个xxxService.pid文件。

Jar包停止运行

那么要如何关掉正在执行的Java进程呢,通常可以运行:

ps aux | grep xxxService

这句指令会列出所有带有xxxService字样的进程,在其中我们找到要关掉的进程ID,随后就用kill -9 pid可以杀死进程。kill -9 发送SIGKILL信号给进程,告诉进程,你被终结了,请立刻退出。

不过有了启动脚本作为基础,我们不需要再费力去找进程ID。结合启动脚本,我们还可以设计下面这样一个停止脚本。

#!/bin/shAPPDIR=`pwd`PIDFILE=$APPDIR/xxxService.pidif [ ! -f "$PIDFILE" ] || ! kill -0 "$(cat "$PIDFILE")"; thenecho "xxxService not running..."elseecho "stopping xxxService..."PID="$(cat "$PIDFILE")"kill -9 $PIDrm "$PIDFILE"echo "...xxxService stopped"fi

这个停止脚本和启动脚本类似,这里就不再逐行解释了,如果大家有什么问题,可以在评论区留言。

 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与爱美生活网(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 《暗黑破坏神4》各流派骨矛死灵优劣势分析    骨矛死灵怎么玩?_暗黑死灵骨矛技能搭配
    《暗黑破坏神4》各流派骨矛死灵优劣势分析
    《暗黑破坏神4》各流派骨矛死灵优劣势分析 骨矛死灵怎么玩?_暗黑死灵骨矛技能搭配,很多朋友都不是很清楚,接下来小编就为大家介绍一下《暗黑破坏神4》各流派骨矛死灵优劣势分析 骨矛死灵怎么玩?_暗黑死灵骨矛技能搭配。  暗黑破坏神4
    06-29
  • 2070显卡和3060显卡哪个好(两种显卡优劣势分析)
    2070显卡和3060显卡哪个好(两种显卡优劣势分析
    RTX 3060:定价2499,性能对标2070   距离上一款NVIDIA显卡新品RTX 3060 Ti首发已经过去俩月半了,因为虚拟货币的关系,这段时间里显卡市场也变得无比魔幻:最低配的RTX 3060 Ti已经溢价至5000元价位,快
  • 中央空调和风管机的区别在哪里(不同类型空调优劣势报告)
    中央空调和风管机的区别在哪里(不同类型空调优
    春天来了,夏天还会远吗?感受着合肥忽冷忽热的天气变化,说不定下一秒就要入夏了呢!正值装修旺季,赶紧装修,赶紧把空调安排上! 不过说到空调,现在很多业主都会有一个疑问:我家要不要装中央空调?昨天就有个合肥业主问过我同样的问题,那今天我就
  • 《街霸6》总监谈现代操作模式优劣 不会破化游戏平衡
    《街霸6》总监谈现代操作模式优劣 不会破化游戏
    相较于前作,《街头霸王6》增添了许多新的元素和功能,其中现代操作模式更能进一步降低玩家上手门槛。《街霸6》总监Takayuki Nakayama在接受外媒采访时对此表示,现代操作模式“不是一个简单的模式”,不会破坏游戏平衡。   根据他的说
    07-04
  • 《F1 22》vs《GT7》画面对比 卧龙凤雏,各有优劣
    《F1 22》vs《GT7》画面对比 卧龙凤雏,各有优
    由Codemasters开发、Electronic Arts发行的《F1 2022》于本周五(7月1日)正式发售,此前油管UP主Cycu1制作了一期《F1 2021》和《F1 22》画面对比,新作进步不大令人失望。随后Cycu1又制作了一期
    07-02
点击排行