SpringBoot打包部署成Windows服务的详细步骤

  • 1.SpringBoot
    • 1.1 pom.xml
    • 1.2 项目代码
      • 1.2.1 项目结构
      • 1.2.2 Controller的代码
      • 1.2.3 Service的代码
      • 1.2.4 Model的代码
    • 1.3 运行结果
  • 2.SpringBoot打包成jar
    • 2.1 打包
    • 2.2 验证jar包
  • 3.配置Procrun
    • 3.1 下载Procrun
    • 3.2 组织目录设置
    • 3.3 编写安装服务的脚本
    • 3.4 编写卸载服务的脚本
  • 4.部署Windows服务
    • 4.1 安装服务
    • 4.2 启动服务
    • 4.3 调用服务
    • 4.4 卸载服务

1.SpringBoot

这里的SpringBoot项目就写一个最基础的SpringBoot就行了,本文的重点是演示如何将SpringBoot打包部署成jar包,然后部署成Windows服务的过程。

1.1 pom.xml

个人习惯先上POM,虽然这个demo没什么东西,但是我觉得上Java代码之前先上POM是对读者最起码的尊重,哈哈哈哈。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.7.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.demo</groupId><artifactId>springforwinservice</artifactId><version>0.0.1-SNAPSHOT</version><name>springforwinservice</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

1.2 项目代码

1.2.1 项目结构

怎么创建SpringBoot项目网上的资料太多了,我就不在这里献丑了,直接上代码。项目的结构很简单就是三层:Controller、Service和Model,如下图:

1.2.2 Controller的代码

package com.demo.springforwinservice.ctrl;import com.demo.springforwinservice.impl.DemoService;
import com.demo.springforwinservice.model.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;@RestController
public class DemoControler {@Autowiredprivate DemoService demoService;@ResponseBody@RequestMapping(value = "/message",produces = "application/json", method = RequestMethod.GET)public Message getMessage() {Message msg = demoService.getMsg();return msg;}
}

1.2.3 Service的代码

package com.demo.springforwinservice.impl;import com.demo.springforwinservice.model.Message;
import org.springframework.stereotype.Service;@Service
public class DemoService {public Message getMsg(){Message msg = new Message(0, "Success!");return  msg;}
}

1.2.4 Model的代码

package com.demo.springforwinservice.model;public class Message {//0表示成功;-1表示失败private int status;//消息private String message;public int getStatus(){return status;}public void setStatus(int status) {this.status = status;}public String getMessage() {return message;}public void setMessage(String message){this.message = message;}public Message(int status, String massage) {this.status = status;this.message = massage;}
}

1.3 运行结果

写完上述代码后,给项目配置一个未被占用的端口号,就可以运行起来检查结果了。我这里使用接口开发的神器:Postman。如下图:

接口可以成功调用,证明项目没有问题。

2.SpringBoot打包成jar

2.1 打包

我是直接使用Maven打的包,如下图:

打包完成后,会在项目路径下生成一个target文件夹,如下图:

红线里就是打出来的jar包。

2.2 验证jar包

打出来jar包后,先不要着急部署成Win服务,最好先验证下jar包是否可用。
下面在控制台中启动:

然后同样使用Postman进行接口调用:

没有问题。

3.配置Procrun

验证jar包好用之后,就是本篇的重点了,配置Procrun。
Procrun是Apache推出的一套能让Java应用程序在Windows平台以服务的方式运行的插件。它主要包括两个程序:

  • 服务应用程序(名为prunsrv.exe),用于转换任一应用程序作为Win服务运行。
  • 监视器应用程序(名为prunmgr.exe),用于监视和配置procrun服务。

3.1 下载Procrun

当时我找这个下载地址还很费了一点劲儿哈哈。
地址为: http://www.apache.org/dist/commons/daemon/binaries/windows/
下载名为:commons-daemon-1.2.0-bin-windows.zip的压缩包,如下图:

下载并解压后,长这个样子:

3.2 组织目录设置

首先我们创建一个目录,比如我这里叫做SpringForWinServiceDemo_Procrun,然后在其下创建三个文件夹,分别是JAR、Logs和Service,如下图:

JAR文件夹,用来放Spring打出来的jar包,如下图:

Logs文件夹用来保存Win Service的运行日志,目前是空的。
Service文件夹用来存放Procrun的exe。首先,将解压的commons-daemon-1.2.0-bin-windows\amd64文件夹下的prunsrv.exe,拷贝到Service文件夹中,如下图:

其次,将commons-daemon-1.2.0-bin-windows文件夹下的prunmgr.exe,拷贝到Service文件夹中,并重命名,我这里命名为SpringForWinServiceDemo.exe,如下图:

这样组织目录就设置好了。

3.3 编写安装服务的脚本

在编写安装服务的脚本install.bat之前,有个非常重要,但是非常容易被忽视的问题(别的博客也没有提到过),这个问题会直接影响你的服务是否能够运行起来,那就是:
确认你的jar包的Main-Class”。
对于我这个工程,我最开始想都不想,就觉得jar包里的Main-Class就是com.demo.springforwinservice.SpringforwinserviceApplication,然后配到脚本里,服务倒是装上了,但是怎么都启动不起来。。。蛋疼,最后搞了半天才得以解决,方法如下:
找到jar包,使用压缩软件打开,如下图:

进入这个META-INF文件夹,使用记事本打开MANIFEST.MF文件,如下图

看见了么,Main-Class是org.springframework.boot.loader.JarLauncher,而不是com.demo.springforwinservice.SpringforwinserviceApplication。
确定了这个后,开始写install.bat,如下:

@echo offrem 设置程序名称
set SERVICE_EN_NAME=SpringForWinServiceDemo
set SERVICE_CH_NAME=Spring演示服务rem 设置java路径
set JAVA_HOME=%JAVA_HOME%rem 设置程序依赖及程序入口类
cd..
set BASEDIR=%CD%
set CLASSPATH=%BASEDIR%\JAR\springforwinservice-0.0.1-SNAPSHOT.jar
set MAIN_CLASS=org.springframework.boot.loader.JarLauncherrem 设置prunsrv路径
set SRV=%BASEDIR%\Service\prunsrv.exerem 设置日志路径及日志文件前缀
set LOGPATH=%BASEDIR%\Logsrem 输出信息
echo SERVICE_NAME: %SERVICE_EN_NAME%
echo JAVA_HOME: %JAVA_HOME%
echo MAIN_CLASS: %MAIN_CLASS%
echo prunsrv path: %SRV%rem 设置jvm
if "%JVM%" == "" goto findJvm
if exist "%JVM%" goto foundJvm
:findJvm
set "JVM=%JAVA_HOME%\jre\bin\server\jvm.dll"
if exist "%JVM%" goto foundJvm
echo can not find jvm.dll automatically,
echo please use COMMAND to localation it
echo then install service
goto end
:foundJvm
echo 正在安装服务...
rem 安装
"%SRV%" //IS//%SERVICE_EN_NAME% --DisplayName="%SERVICE_CH_NAME%" "--Classpath=%CLASSPATH%" "--Install=%SRV%" "--JavaHome=%JAVA_HOME%" "--Jvm=%JVM%" --JvmMs=256 --JvmMx=1024 --Startup=auto --JvmOptions=-Djcifs.smb.client.dfs.disabled=false ++JvmOptions=-Djcifs.resolveOrder=DNS --StartMode=jvm --StartClass=%MAIN_CLASS% --StartMethod=main --StopMode=jvm --StopClass=%MAIN_CLASS% --StopMethod=main --StopParams=  --LogPath=%LOGPATH% --StdOutput=auto --StdError=auto
echo 安装服务完成。
pause

详细解释如图:

3.4 编写卸载服务的脚本

卸载服务的uninstall.bat脚本比较简单,编写完成后同样放到Service文件夹下即可,如下:

@echo offcd..
set basedir=%CD%
set SERVICE_NAME=SpringForWinServiceDemo
set SRV=%BASEDIR%\Service\prunsrv.exe
echo 正在卸载服务...
"%SRV%" //DS//%SERVICE_NAME%
echo 服务卸载完毕。
pause

4.部署Windows服务

4.1 安装服务

执行install.bat,如下图:

提示“安装服务完成”后,在Windows任务栏的搜索框中直接输入“服务”或者“Service”,就可以打开Windows服务,如下图:


看,服务已经装好了。

4.2 启动服务

装好的服务还没有启动,我们需要手动将其启动,回到Service文件夹,双击打开SpringForWinServiceDemo.exe,然后点击“开始”,如下:

如果一切正常的话,服务就可以成功启动了,如下图:

再次回到Windows服务列表页,可以看到服务的状态为“正在运行”,如下图:

注意,如果服务起不来的话,一定要去检查Procrun的log,在这里:

4.3 调用服务

仍然使用Postman,来调用下这个Windows服务的接口,如下图:

Good, every good!
本地服务部署成功咯~~

4.4 卸载服务

如果想要卸载服务,运行uninstall.bat即可,如下图:

然后重启电脑即可看见对应的服务已经没有了~~~~
(怎么才能在不重启电脑的前提下,彻底卸载删除服务的方法我摸索了半天也没找到,所以欢迎大家交流以及批评指正~~~)

SpringBoot打包部署成Windows服务的详细步骤相关推荐

  1. 把 Console 部署成 Windows 服务,四种方式总有一款适合你!

    一:背景 1. 讲故事 上周有一个项目交付,因为是医院级项目需要在客户的局域网独立部署.程序:netcore 2.0,操作系统:windows server 2012,坑爹的事情就来了, netcor ...

  2. 测试人员如何搭建自动打包部署平台?(具体详细步骤及下载地址)

    *搭建思路* 1第一步,搭建jenkins服务器 2第二步,配置jenkins,配置svn,maven,jdk等. 3第三步,建立jenkins服务器和应用服务器linux的互相信任关系,实现免密登录 ...

  3. Springboot打包后台运行及注册成Windows服务

    jar后台执行 新建bat文件,将下面文件拷贝到bat文件中,并保存. @echo off start javaw -jar xxx.jar exit 双击运行即可. 由于采用javaw运行,没有命令 ...

  4. minio:安装部署并安装成windows服务

    前言 关于分布式文件存储,之前我也是使用fastdfs,那为什么突然选择minio? 1.它可以多平台部署 2.搭建起来不是很复杂 3.github近30K的star 什么是minio? 构建高性能的 ...

  5. 【部署】SpringBoot 打包部署/共享依赖包(分布式开发集中式部署微服务)精简jar包

    精简jar包 将项目跟第三方依赖分开 [部署]SpringBoot 打包部署/共享依赖包(分布式开发集中式部署微服务) 1 修改pom <build><plugins>< ...

  6. 将Carte部署为Windows服务

    1. 为何需要部署成Windows Service 如果以cmd命令行来启动Carte,如果开发者不小心将此命令行窗口给关闭了,那么Carte服务也会随之关闭.因此将Carte部署成Windows S ...

  7. 如何把Asp.NetCore部署成window服务

    在window上部署Asp.netcore时,当不想使用IIS时,使用双击启动就会出现一个黑色的窗体,总感觉会不经意间给关闭掉.这时候就想如果可以生成winserver,这样就可以避免掉,也可以使崩溃 ...

  8. Java的jar文件安装成windows 服务

    Java的jar文件安装成windows 服务: 1.下载:nssm,复制到jar文件目录下 2. jar文件目录下创建bat文件[run.bat],内容为[java -jar 文件名.jar] 3. ...

  9. 将zookeeper、Tomcat、redis部署成windos服务

    windows下zookeeper安装并发布成windows服务: https://blog.csdn.net/yzy199391/article/details/80605195 把Tomcat打成 ...

最新文章

  1. R语言构建xgboost模型:使用xgboost的第一颗树(前N颗树)进行预测推理或者使用全部树进行预测推理、比较误分类率指标
  2. Dockerfile中通过ENV指定动态参数在RUN时传递参数(部署后台jar包时指定端口为例)
  3. linux 搭建github,github在linux上的环境搭建-Go语言中文社区
  4. openwrt安装蒲公英_不会OpenWRT、软路由也能双宽带叠加,蒲公英X6快速上手体验...
  5. 35个让人惊讶的 CSS3 动画效果演示
  6. 学习ActiveMQ(一):安装与启动
  7. SpringMVC框架----ModelAttribute注解
  8. 目标检测使用LabelImg标注VOC数据格式和YOLO数据格式——LabelImg使用详细教程
  9. MySQL全局锁库锁表
  10. 大数据测试理论与方法
  11. 杭州电子科技大学计算机科学与技术复试,杭州电子科技大学计算机科学与技术(一级学科)考研参考书目...
  12. bmp格式如何转换成png格式
  13. Android APP在线自动更新安装
  14. ppt在服务器上打开要修复,打开ppt提示需要修复怎么办-处理ppt总是提示需要修复的方法 - 河东软件园...
  15. 文件 打包 及 生成Excel文件转PDF格式和Excsl文件格式一体数据
  16. js--动态生成表格
  17. 高级转录组调控分析和R语言数据可视化第十三期 (线上线下同时开课)
  18. 相册列表 鼠标悬停显示照片介绍
  19. 干货 | 三维点云配准:ICP 算法原理及推导
  20. 服务器CPU型号后缀的区别,CPU后缀英文简单科普知识,若能区别字母的含义,选购好CPU不求人...

热门文章

  1. 韩博士一键重装win7系统的详细教程
  2. 智慧公交app开发的功能主要有哪些
  3. 从Solr卡顿到G1垃圾回收
  4. 计算机网络考研1800题,我的计算机考研复习经验 (分5大部分,很详细)
  5. C# SerialPort的使用
  6. 三角形已知两边一斜角时求第三边的公式
  7. 车库咖啡创始人苏菂:对于创业咖啡,我的看法
  8. 1393:联络员(liaison)
  9. 一款基于ssd1306驱动的12864屏简介
  10. C++ Builder XE 透明窗体特效处理实例