将Spring Boot应用程序注册成为系统服务

在之前的文章中,我们提到了很多Spring Boot的技巧,那么当我们创建好了Spring Boot应用程序之后,怎么在生成环境中运行呢?如果只是以原始的java -jar 的方式来运行的话,不能保证程序的健壮性和稳定性,最好的办法是将程序注册成为服务来使用。

本文将会讲解如何将Spring Boot应用程序注册成为Linux和windows的服务。

前期准备

首先我们需要将应用程序打包成为一个可执行的jar包,我们需要添加如下依赖:

<packaging>jar</packaging>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
</parent> <dependencies>
....
</dependencies> <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<executable>true</executable>
</configuration>
</plugin>
</plugins>
</build>

这里的packaging我们需要选择jar。添加spring-boot-maven-plugin是为了将app打包成为可执行的jar包。

打包成可执行jar包

写好了应用程序,我们可以执行:

mvn clean package

来打包应用程序,这里我们打包之后的jar包名字为:springboot-run-as-service-0.0.1-SNAPSHOT.jar。

注册成为liunx服务

在linux中,我们可以选择System V init script或者Systemd 配置文件,前者逐渐在被后者替代。

为了安全起见,我们需要创建一个运行用户,并给jar包赋予相应的权限:

$ sudo useradd flydean
$ sudo passwd flydean
$ sudo chown flydean:flydean your-app.jar
$ sudo chmod 500 your-app.jar

System V Init

创建一个文件链接到init.d目录,如下:

sudo ln -s /path/to/your-app.jar /etc/init.d/your-app

接下来我们就可以启动应用程序了:

sudo service your-app start

service命令支持start, stop, restart 和 status。同时它还提供了如下的功能:

  • your-app 将会以flydean用户启动
  • 程序运行的pid存储在/var/run/your-app/your-app.pid
  • 应用程序的日志在/var/log/your-app.log

Systemd

使用Systemd,我们需要在 /etc/systemd/system 创建一个your-app.service文件:

[Unit]
Description=A Spring Boot application
After=syslog.target [Service]
User=flydean
ExecStart=/path/to/your-app.jar SuccessExitStatus=100 [Install]
WantedBy=multi-user.target

接下来我们可以使用systemctl start|stop|restart|status your-app来管理你的服务了。

Upstart

Upstart是一个事件驱动的服务管理器,如果你使用Ubuntu,将会被默认安装。

我们来创建一个your-app.conf :

# Place in /home/{user}/.config/upstart

description "Some Spring Boot application"

respawn # attempt service restart if stops abruptly

exec java -jar /path/to/your-app.jar

在Windows中安装

在windows中,我们也有很多方式,如下:

Windows Service Wrapper

Windows Service Wrapper 又叫 winsw是一个开源软件,winsw需要和一个配置文件your-app.xml配合使用:

<service>
<id>MyApp</id>
<name>MyApp</name>
<description>This runs Spring Boot as a Service.</description>
<env name="MYAPP_HOME" value="%BASE%"/>
<executable>java</executable>
<arguments>-Xmx256m -jar "%BASE%\your-app.jar"</arguments>
<logmode>rotate</logmode>
</service>

注意,你需要修改winsw.exe成为your-app.exe来和your-app.xml配合使用。

Java Service Wrapper

Java Service Wrapper 提供了非常强大的配置,他可以让你的应用程序在windows和Linux下面使用。有兴趣的同学可以自行去学习。

更多教程请参考 flydean的博客

将Spring Boot应用程序注册成为系统服务的更多相关文章

  1. SpringBoot之二:部署Spring Boot应用程序方式

    衡量多种部署方式 Spring Boot应用程序有多种构建和运行方式,其中一些你已经使用过了. 在IDE中运行应用程序(涉及Spring ToolSuite或IntelliJ IDEA). 使用Mav ...

  2. 使用Maven插件构建Spring Boot应用程序镜像

    使用Maven插件构建Spring Boot应用程序的Docker镜像. 环境准备 1.Linux系统 2.安装JDK,Maven 3.安装Docker 应用实践 1.在应用程序根目录下添加Docke ...

  3. docker 部署Spring Boot:Docker化Spring Boot应用程序

    第一章 1.创建项目存放目录 mkdir /root/sproot -p 2.准备好Spring Boot应用程序 jar 包 testrest.jar 第二章 1. 安装docker 在所有节点执行 ...

  4. Spring Boot入门程序-STS

    使用Eclipse EE 中的 Spring Tool插件,完成 第一个Spring Boot应用程序的创建. 一.安装Spirng Tool插件 在 Eclipse EE Oxygen版本,安装“S ...

  5. Spring Boot入门程序

    创建第一个Spring Boot的入门程序. 带你一步一步的,搭建第一个Spring Boot 的入门程序,并成功运行,通过实践过程,初步认识和了解如何使用Spring Boot 创建应用程序. 一. ...

  6. 将Spring Boot应用程序迁移到Java9:兼容性

    将 Spring Boot 应用程序迁移到 Java 9:兼容性 随着 Java 9 的到来,关于如何迁移应用程序以使用模块系统有很多的讨论.遗憾的是,大多数文章的焦点都集中于简单的 Hello Wo ...

  7. 如何为Spring Boot应用程序配置端口

    [转]https://www.javaroad.cn/questions/11162 1 个月前 1.1通过属性文件更新 . /src/main/resources/application.prope ...

  8. 阿里P7级教你如何在Spring Boot应用程序中使用Redis

    在Spring Boot应用程序中使用Redis缓存的步骤: 1.要获得Redis连接,我们可以使用Lettuce或Jedis客户端库,Spring Boot 2.0启动程序spring-boot-s ...

  9. 峰哥说技术:02-第一个Spring Boot应用程序

    Spring Boot深度课程系列 峰哥说技术—2020庚子年重磅推出.战胜病毒.我们在行动 02第一个Spring Boot应用程序 1.版本要求 集成开发环境:IntelliJ IDEA 2017 ...

随机推荐

  1. C 电压

      时间限制 : 10000 MS   空间限制 : - KB  评测说明 : 1s,256m 问题描述 JOI社的某个实验室中有着复杂的电路.电路由n个节点和m根细长的电阻组成.节点被标号为1~N ...

  2. 1+X Web前端开发(初级)理论考试样题(附答案)

    传送门 教育部:职业教育将启动"1+X"证书制度改革 职业教育改革1+X证书制度试点启动 1+X成绩/证书查询入口 一.单选题(每题 2 分,共 60 分) 1.在 HTML 中, ...

  3. 《Three.js 入门指南》2.4.1- 照相机 - 透视投影demo

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 前端上传视频、图片、文件等大文件 组件Plupload使用指南

    demo:https://blog.csdn.net/qq_30100043/article/details/78491993 Plupload上传插件中文帮助文档网址:http://www.phpi ...

  5. 【php】字符串

    1.字符串的定义方式:1.单引号 ''2.双引号 ""3.定界符 <<<注意结束时的使用例:$str = <<<myStr字符串内容myStr; ...

  6. Hadoop(八):YARN框架简介

    YARN组件图 Container是YARN框架中对应资源的抽象,封装了运行节点上的资源(内存+CPU) NodeManager负责Container状态的维护,通过心跳,把资源信息(剩余CPU.内存 ...

  7. 适用于 Mpvue 的微信小程序富文本解析自定义组件

    废话不多说,直接上方法: 首先 npm 安装 mpvue-wxparse npm i mpvue-wxparse 接下来:使用 <template> <div> <wxP ...

  8. javascript入门 之 zTree(十二 托拽事件(二))

    1.逻辑可能有不完善的地方,如果发现,请指出. <!DOCTYPE html> <HTML> <HEAD> <TITLE> ZTREE DEMO - d ...

  9. webstorm 永久激活方法

    打开终端,执行: cd /etc/ sudo vim hosts 在最后一行加上: 0.0.0.0 account.jetbrains.com 打开webstorm,选择Activation Code ...

  10. CVPR2020文章汇总 | 点云处理、三维重建、姿态估计、SLAM、3D数据集等(12篇)

    作者:Tom Hardy Date:2020-04-15 来源:CVPR2020文章汇总 | 点云处理.三维重建.姿态估计.SLAM.3D数据集等(12篇) 1.PVN3D: A Deep Point ...