一、使用 maven 打包项目为 xxx.jar
二、查看 Linux 系统中是否安装了 JDK
如果未安装,请参考 Linux 下安装 JDK 链接:https://blog.csdn.net/qq_40087415/article/details/79407061
三、配置运行 xxx.jar 脚本
1、选好你要部署到的文件路径 ,假设项目名是share,这里我选的是/home/share,然后建立几个文件夹和一个运行脚本。
cd /home
mkdir share
cd /share
mkdir app
mkdir config
mkdir heapdump
mkdir log
touch restart.sh
目录结构是
|—–home
|———share
|————–app (存放share.jar)
|————–config (jar项目的配置文件{application.yml等},jar项目运行的时候,优先使用这里的配置文件,若没有才使用jar包里的配置文件)
|————–heapdump (保存Heap Dump信息)
|————–log (相关log)
|————–restart.sh (运行脚本)
2、编写
restart.sh脚本的内容
#!/bin/bash
base_home='/home/share'
app_name='share'
pid=`ps -ef|grep ${app_name}|grep -v grep|grep -v restart|awk '{print$2}'`
if [ -n "${pid}" ] ;then
kill -9 ${pid}
sleep 10
fi
gclog_file=$base_home/log/gc.log
dump_dir=$base_home/heapdump
errorlogs_dir=$base_home/log
java -Xmx1g -Xms1g -XX:+UseParallelGC -XX:+UseParallelOldGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:GCLogFileSize=128M -XX:NumberOfGCLogFiles=1 -Xloggc:${gclog_file} -XX:HeapDumpPath=${dump_dir} -jar $base_home/app/${app_name}.jar --spring.config.location=$base_home/config/application.yml >> $base_home/log/${app_name}_$(date +'%Y%m%d').log &
3、解释脚本内容
base_home='/home/share' : share项目的根路径
app_name='share' : 项目名称(即/home/share/app/share.jar的文件名)
pid=`ps -ef|grep ${app_name}|grep -v grep|grep -v restart|awk '{print$2}'` : 找到ABC项目当前运行的进程号(若有)
if [ -n "${pid}" ] ;then kill -9 ${pid} sleep 10 fi : 若share项目已运行,根据上一步骤获得的pid可以杀死当前运行ABC项目的进程
最后的运行命令有点复杂,让我们一个个解读
这么长的命令,其实运行起来的命令是很简单 java -jar $base_home/app/${app_name}.jar &,这样即可成功运行起来,& 是让此命令后台运行 ,这里这么复杂是进行了jvm优化。
-Xmx1g : 设置JVM最大可用内存为1g。
-Xms1g : 设置JVM促使内存为1g。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-XX:+UseParallelGC : 选择垃圾收集器为并行收集器。
-XX:+UseParallelOldGC : 配置年老代垃圾收集方式为并行收集。
-XX:+PrintGCDetails : 可以详细了解GC中的变化。
-XX:+PrintGCTimeStamps : 配合上面的PrintGCDetails,可以了解这些垃圾收集发生的时间,自JVM启动以后以秒计量。
-XX:+UseGCLogFileRotation : 启用GC日志文件的自动转储。
-XX:GCLogFileSize=128M : 控制GC日志文件的大小。
-XX:NumberOfGCLogFiles=1 : GC日志文件的循环数目。
-Xloggc:${gclog_file} : 把gc日志信息记录到文件gclog_file=$base_home/log/gc.log。
-XX:HeapDumpPath=${dump_dir} : 将Heap Dump信息保存到dump_dir=$base_home/heapdump。
--spring.config.location=$base_home/config/application.yml : 运行的配置文件,若没有config/application.yml,则用jar里的配置文件。
>> $base_home/log/${app_name}_$(date +'%Y%m%d').log 将运行的log信息保存到$base_home/log 文件夹下,log文件会以日期命名${app_name}_$(date +'%Y%m%d').log 最终的名字可能是share_20190213.log 。
3.使用
经过对 restart.sh 脚本的编写,然后执行 chmod +x restart.sh 这个脚本就可以正常运行了
sh restart.sh(要确保 share.jar 包已经上传到 app/ 文件夹下)

本文详细介绍如何在Linux环境下使用Maven打包Java项目,并通过shell脚本进行优化部署,包括JVM参数调整、日志管理和配置文件加载。
2156

被折叠的 条评论
为什么被折叠?



