zoukankan      html  css  js  c++  java
  • 8、Spring Boot 2.x 服务器部署

    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
    
  • 相关阅读:
    嵌入式驱动视频2019.03.24
    wps如何输入连续的长破折号
    python绘图问题
    2.13
    2.12
    2.10
    2.9
    2.8
    2.7
    2.5
  • 原文地址:https://www.cnblogs.com/Grand-Jon/p/9990949.html
Copyright © 2011-2022 走看看