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. 数据库事务隔离级别 - 分析脏读 & 不可重复读 & 幻读

    一 数据库事务的隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted .Read committed .Repeatable read .Serializable ,这 ...

  2. 利用Python进行数据分析 第4章 NumPy基础-数组与向量化计算(3)

    4.2 通用函数:快速的元素级数组函数 通用函数(即ufunc)是一种对ndarray中的数据执行元素级运算的函数. 1)一元(unary)ufunc,如,sqrt和exp函数 2)二元(unary) ...

  3. electron实现透明点投的方法

    1. electron createWindow 的时候 设置 transparent: true, clickThrough: 'pointer-events' 2. body 上添加 pointe ...

  4. 解决django的后台管理界面添加中文内容乱码问题

    在使用django migrate功能时,默认数据库的字符集不是utf8. 是latin 1,然后在后台管理model时,不允许有中文字符插入 解决方案: 在使用migrate建库之前先把数据库建立起 ...

  5. (一)Lucene简介以及索引demo

    一.百度百科 Lucene是apache软件基金会4 jakarta项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查 ...

  6. 网络知识(1)TCP/IP五层结构

    图1 数据流向图 1,网络基础 1.1 发展 古代:①烽火狼烟最为原始的0-1单bit信息传递:②飞鸽传书.驰道快马通信,多字节通信: 近代:①轮船信号灯:②无线电报[摩尔斯码]: 现代:①有线模拟通 ...

  7. AngularJS视图 ng-view

    AngularJS支持通过在单个页面上的多个视图的单页应用.要做到这一点AngularJS提供ng-view 和 ng-template指令,以及 $routeProvider 服务. ng-view ...

  8. .net Core CLR

    .net Core CLR是开源的.大部分文件是C++写成.这样他就可以编译后再不同的平台运行. https://github.com/dotnet/coreclr

  9. mysql8中查询语句表别名不能使用 “of”

    今天在迁移一个项目的时候,发现有一个sql报错,但是语句跟迁移之前完全一样,所以想来应该是 mysql 版本差异导致的. 迁移之前版本:5.6.28(腾讯云) 迁移之后版本:8.0.16(阿里云) 新 ...

  10. VBA消息框(MsgBox)(五)

    MsgBox函数显示一个消息框,并等待用户点击一个按钮,然后根据用户点击的按钮执行相关的操作. 语法 MsgBox(prompt[,buttons][,title][,helpfile,context ...