1.8 服务器部署

1.8.1 jar包提取出来maven打包(避免每次重复打相同的jar包),pom.xml配置如下:

<build>
<finalName>xxx</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<layout>ZIP</layout>
<includes>
<include>
<groupId>nothing</groupId>
<artifactId>nothing</artifactId>
</include>
</includes>
<attach>false</attach>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<type>jar</type>
<includeTypes>jar</includeTypes>
<includeScope>runtime</includeScope>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>

1.8.2 常用命令

  • 打包:mvn clean package -DskipTests
  • 运行:nohup java -jar xxx.jar >./logs/xxx.log 2>&1 &
  • 查询:jps -l | grep xxx.jar
  • 关闭:kill -9 pid
1.8.3 启动脚本startup.sh
# !/bin/bash
JAVA_HOME="/opt/jvm/jdk1.8.0_141"
APP_HOME="/data/Project/backend"
APP_LOG="$APP_HOME/logs"
APP_LIBS="$APP_HOME/libs"
APP_MAIN="xxx.jar" # JVM启动参数
# -server:一定要作为第一个参数,多个CPU时性能佳
# -Xloggc:记录GC日志,建议写成绝对路径,如此便可在任意目录下执行该shell脚本
#JAVA_OPTS="-server -Xms1048m -Xmx1048m -Xloggc:$APP_HOME/logs/gc.log"
JAVA_OPTS="-server -Xms1048m -Xmx1048m" # 加载依赖到classpath
#for lib in ${APP_HOME}/libs/*.jar;
# do CLASSPATH=${lib}:"${CLASSPATH}";
#done #for setting in ${APP_HOME}/config/*.setting;
# do CLASSPATH=config/${setting##*/}:"${CLASSPATH}";
#done #CLASSPATH=log4j.properties:"${CLASSPATH}"
#CLASSPATH=${CLASSPATH}:.:${APP_HOME}/dailyload.jar # 初始化参数
#if [ -n "$1" ] ;
#then
# dt=$1
# if ! (echo $dt | grep -Eq "[0-9]{4}-[0-9]{2}-[0-9]{2}" && date -d $dt +%Y%m%d >/dev/null 2>&1;)
# then
# echo "param can not convert to date : $dt"
# exit 1
# fi
#else
# dt=`date -d "0 days ago" "+%Y-%m-%d"`
#fi args="$*" # 初始化进程ID(0表示未启动)
pid=0 # 获取Java应用的PID
getPID(){
javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAIN`
if [ -n "$javaps" ]; then
pid=`echo $javaps | awk '{print $1}'`
else
pid=0
fi
} # 启动Java应用程序
# ------------------------------------------------------------------------------------------------------
# 1、调用getPID()函数,刷新$pid全局变量
# 2、若程序已经启动($pid不等于0),则提示程序已启动
# 3、若程序未被启动,则执行启动命令
# 4、启动命令执行后,再次调用getPID()函数
# 5、若步骤4执行后,程序的PID不等于0,则打印Success,反之打印Failed
# 注意:[echo -n]表示打印字符后不换行
# 注意:[nohup command > /path/nohup.log &]是将作业输出到nohup.log,否则它会输出到该脚本目录下的nohup.out中
# ------------------------------------------------------------------------------------------------------
startup(){
getPID
echo "==============================================================================================="
if [ $pid -ne 0 ]; then
echo "$APP_MAIN already started(PID=$pid)"
echo "==============================================================================================="
else
echo -n "Starting $APP_MAIN" #方式1 可执行jar包(jar的MANIFEST.MF文件已指定主函数和依赖)
#nohup $JAVA_HOME/bin/java $JAVA_OPTS -jar dailyload.jar $dt > $APP_LOG/nohup.log &
nohup java -Dloader.path=$APP_LIBS -jar $APP_HOME/xxx.jar > /dev/null & #方式2 不可执行jar包(需自己加载依赖到classpath)
#nohup $JAVA_HOME/bin/java $JAVA_OPTS -Dfile.encoding=UTF-8 -classpath $CLASSPATH $APP_MAIN $args > $APP_LOG/nohup.log &
#nohup $JAVA_HOME/bin/java $JAVA_OPTS -Dfile.encoding=UTF-8 -classpath $CLASSPATH $APP_MAIN $args > /dev/null & getPID
if [ $pid -ne 0 ]; then
echo "(PID=$pid)...[Success]"
echo "==============================================================================================="
else
echo "[Failed]"
echo "==============================================================================================="
fi
fi
} # 启动
startup
1.8.4 查询状态脚本 status.sh
# !/bin/bash

APP_HOME=/data/Project/backend
APP_MAIN=xxx.jar pid=0 getPID(){
javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAIN`
if [ -n "$javaps" ]; then
pid=`echo $javaps | awk '{print $1}'`
else
pid=0
fi
} getServerStatus(){
getPID
echo "==============================================================================================="
if [ $pid -ne 0 ]; then
echo "$APP_MAIN is running(PID=$pid)"
echo "==============================================================================================="
else
echo "$APP_MAIN is not running"
echo "==============================================================================================="
fi
} getServerStatus
1.8.5 关闭脚本 shutdown.sh
# !/bin/bash

APP_HOME=/data/Project/backend/
APP_MAIN=xxx.jar pid=0 getPID(){
javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAIN`
if [ -n "$javaps" ]; then
pid=`echo $javaps | awk '{print $1}'`
else
pid=0
fi
} # 停止Java应用程序
# ------------------------------------------------------------------------------------------------------
# 1、调用getPID()函数,刷新$pid全局变量
# 2、若程序已经启动($pid不等于0),则开始执行停止程序操作,否则提示程序未运行
# 3、使用[kill -9 PID]命令强制杀掉进程
# 4、使用[$?]获取上一句命令的返回值,若其为0,表示程序已停止运行,则打印Success,反之打印Failed
# 5、为防止Java程序被启动多次,这里增加了反复检查程序进程的功能,通过递归调用shutdown()函数的方式,反复kill
# 注意:Shell编程中,[$?]表示上一句命令或者上一个函数的返回值
# ------------------------------------------------------------------------------------------------------
shutdown(){
getPID
echo "==============================================================================================="
if [ $pid -ne 0 ]; then
echo -n "Stopping $APP_MAIN(PID=$pid)..."
kill -9 $pid
if [ $? -eq 0 ]; then
echo "[Success]"
echo "==============================================================================================="
else
echo "[Failed]"
echo "==============================================================================================="
fi
getPID
if [ $pid -ne 0 ]; then
shutdown
fi
else
echo "$APP_MAIN is not running"
echo "==============================================================================================="
fi
} shutdown

8、Spring Boot 2.x 服务器部署的更多相关文章

  1. spring boot本地调试服务器部署项目

    项目本地测试然后发布到服务器上,各种BUG层出不穷.那么下面配置下,然后在本地调试部署在服务器上的程序吧 一.首先idea打开你的项目,服务器上传打包的程序.然后如下命令启动(linux),绿色参数为 ...

  2. Spring Boot(十二):spring boot如何测试打包部署

    Spring Boot(十二):spring boot如何测试打包部署 一.开发阶段 1,单元测试 在开发阶段的时候最重要的是单元测试了,springboot对单元测试的支持已经很完善了. (1)在p ...

  3. Spring Boot应用 打包与部署指南

    Spring Boot的打包与部署有何特点? Java Web应用在Spring Boot之前,通常是打包成war(Web application ARchive)包,结合Tomcat来完成部署. 对 ...

  4. Spring Boot入门系列(十五)Spring Boot 开发环境热部署

    在实际的项目开发过中,当我们修改了某个java类文件时,需要手动重新编译.然后重新启动程序的,整个过程比较麻烦,特别是项目启动慢的时候,更是影响开发效率.其实Spring Boot的项目碰到这种情况, ...

  5. 【docker】docker部署spring boot项目在服务器上

    IDE:idea 工具:docker spring boot:2.0.1 ======================================== 简单记录一下流程,以供参考: 第一步:首先得 ...

  6. docker部署spring boot项目在服务器上

    IDE:idea 工具:docker spring boot:2.0.1 ======================================== 简单记录一下流程,以供参考: 第一步:首先得 ...

  7. Spring Boot 系列教程5-热部署-devtools模块

    devtools模块 devtools模块,是为开发者服务的一个模块.主要的功能就是代码修改后一般在5秒之内就会自动重新加载至服务器,相当于restart成功. 原理 简单原理 在发现代码有更改之后, ...

  8. 如何把kotlin+spring boot开发的项目部署在tomcat上

    本文只讲部署过程,你首先要保证你的程序能在IDE里跑起来: 先看看你的application.properties中设置的端口号与你服务器上tomcat的端口号是否一致 server.port=80 ...

  9. Spring boot(4)-应用打包部署

    1.Spring Boot内置web spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动.其内置Tomcat容器或Jetty容器,具体由配置来决定 ...

随机推荐

  1. EventLoop介绍

    在Netty中使用EventLoop接口代表事件循环,EventLoop是从EventExecutor和ScheduledExecutorService扩展而来,所以可以讲任务直接交给EventLoo ...

  2. WIN10更换无线网卡后WIFI无法正常启用

    这里根据自己经历提供几个方案: 首先我们要确定这两个地方正常(表示网卡能识别.驱动安装好:有无线开关没打开的朋友请出门右转): 方案一:万能的重启,不觉得麻烦的就多重启几遍.大力出奇迹! 方案二:然后 ...

  3. wireguard使用方法

    1.翻墙访问网页:https://cryptostorm.is/wireguard.cgi 并下载客户端 2. 选者第二个并打开 3.复制publickey 4.黏贴在第二行并addkey: 5.将获 ...

  4. WUTOJ 1284: Gold Medal(Java)

    1284: Gold Medal 题目   有N个砝码,重量为:3i-1(1<=i<=N),有一块重量为 W 的金牌.现在将金牌放在天平的左边.你需要将砝码放在左边或右边使得天平平衡,如果 ...

  5. Layui连接mysql操作CRUD案例

    今天分享的是一个新前端框架Layui,用它来链接数据库实现一下crud的操作. 一:layui简历 layui,是一款采用自身模块规范编写的前端 UI 框架,遵循原生 HTML/CSS/JS 的书写与 ...

  6. javascript 垃圾回收机制和内存管理

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 垃圾回收机制的原理是找到不再被使用的变量,然后释放其占用的内存,但这个过程不是时时的,因为其开销比较大,所 ...

  7. php 环境搭建问题

    项目过程中需要用到 PHP环境 https://www.cnblogs.com/cyrfr/p/6483529.html APACHE无法启动:THE REQUEST OPERATION HAS FA ...

  8. springboot启动流程(一)构造SpringApplication实例对象

    所有文章 https://www.cnblogs.com/lay2017/p/11478237.html 启动入口 本文是springboot启动流程的第一篇,涉及的内容是SpringApplicat ...

  9. 伪元素before和after本质

    之所以被称为伪元素,是因为他们不是真正的页面元素,html没有对应的元素,但所有的用法和表现行为和真正的页面元素是一样的,可以对其使用诸如页面元素一样的css样式,表面上看上去貌似页面的谋些元素,实际 ...

  10. SAP官方发布的ABAP编程规范

    最近有朋友在公众号后台给我留言,"Jerry啊,你最近写的都是一些SAP研究院里面用到的新技术,能不能写点SAP传统的开发技术比如ABAP相关的东西"? 其实Jerry在刚开始写这 ...