• 优雅的启动、停止、重启你的SpringBoot项目


    前言

    你是如何启动、关闭你的SpringBoot项目的?还是使用java -jar xxxx.jar启动?
    还在用ps -ef找到你的pid去kill你的应用吗?
    让我们来看看还有什么更加优雅的一键启动关闭的方式。

    第一种方式

    使用shell脚本,就是编写相应的shell脚步去启动和关闭我们的项目。
    脚本内容:https://github.com/LinkinStars/springBootTemplate/blob/master/app.sh
    PS:本人不是专业运维,可能shell脚本不够规范,见谅~~

     

    脚本的使用

    首先,将你需要发布的jar包,和含有上述内容的脚本app.sh,上传至linux服务器,注意两者必须处于同一目录,并且该目录下只有一个jar包,并给与app.sh相应执行权限,chmod 777 app.sh

    然后就可以执行脚本,命令如下

    命令作用
    ./app.sh start 启动应用
    ./app.sh stop 关闭应用
    ./app.sh restart 重启应用
    ./app.sh status 查看应用状态
    ./app.sh stop -f 强制kill应用进程

    注意,重新发布应用时,先stop再上传jar包哦。

    使用情况如图:

     

    脚本中可以修改的地方:

    19行左右: nohup java -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError -Xms512M -Xmx4G -jar $appName > /dev/null 2>&1 &

    这是最终jar的启动命令,在这里你需要对gc、Xms、Xmx等针对你机器的实际情况修改,还可以添加你所需要的启动参数等。

    56行左右: for i in {3..1}

    这里是设置restart的时候等待的时间,因为有的项目在3秒之内可能没有办法正常停止,所以可以调整为5秒,保证应用确实正常停止后再启动

    第二种方式

    如果你以为这样就足够优雅了,那你就太天真了,如果你使用的是SpringBoot2.0及以上的版本,那就有福了,不需要脚本也可以很优雅。

    如何使用

    首先你修改一下打包的方式:
    如果你使用gradle构建的项目,在build.gradle文件中加入以下代码,打包时使用bootJar进行打包
    bootJar {
         launchScript()
    }
    如果你使用maven进行构建的项目,添加下面的代码

    <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <configuration>
            <executable>true</executable>
        </configuration>
    </plugin>

     打出来的jar文件非常神奇,在linux系统可以直接使用./app.jar这样类似于启动shell脚本一般的方式启动项目,你可以先尝试一下是否能这样启动,来保证后续步骤的正常。

    第二步添加链接
    在服务器上运行下面的命令:
    $ sudo ln -s /var/myapp/myapp.jar /etc/init.d/myapp
    其中【/var/myapp/myapp.jar】为你上传至服务器jar的绝对路径,一定要写全哦。
    【/etc/init.d/myapp】里面的myapp可以修改为你自己想要的名称,后面会用到。

    第三步启动
    做完之后,你就可以使用service命令,像启动停止服务一样操作你的应用:

    $ service myapp start
    $ service myapp stop
    $ service myapp status
    

    测试效果如下:
    [root@localhost ~]# service myapp start
    Started [31624]
    [root@localhost ~]# service myapp status
    Running [31624]
    [root@localhost ~]# service myapp stop
    Stopped [31624]

    其中会遇到的坑:

    使用service myapp start命令后可能出现Unable to find Java.
    使用ln -s /usr/local/jdk/bin/java /sbin/java命令来解决。
    其中【/usr/local/jdk/bin/java】为你安装在服务器上jdk的目录
    【/sbin/java】不需要修改
    问题解决参考:https://github.com/spring-projects/spring-boot/issues/5690

    总结

    这样之后你想停止应用,不需要再像以前一样ps -ef找来找去了。
    这对于之后的CICD,或者是docker化的你的应用等,都有一定的帮助。

    参考博客:
    https://segmentfault.com/a/1190000012030747
    https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#deployment-install

  • 相关阅读:
    Git 使用vi或vim
    git 添加远程仓库后无法push
    windows下使用IIS创建git服务
    NPOI 操作office、word、excel
    delphi 模拟POST提交数据
    git 用远程覆盖本地
    Delphi中MD5实现方法(转)
    Delphi 操作Ini文件
    Spring系列之——spring security
    Spring系列之——使用模板快速搭建springboot项目
  • 原文地址:https://www.cnblogs.com/linkstar/p/9815097.html
Copyright © 2020-2023  润新知