大家好!我是锦视,从事IT技术开发近12年,参与及独立负责过大大小小的项目不少于60个,接触过个各行各业,具有丰富的项目开发及管理经验,来掘金平台目的是记录自己职业生涯中的点点滴滴~~~
前言
相信大家都知道window系统自带的自启动服务,win+r输入services.msc即可打开,打开后会看到系统内置的一些服务,而且有些是已经启动的,如下截图:
那么今天我就以一个Spring Boot项目来和大家一起讨论交流一下,我是如何将一个可执行的spring boot项目制作为windows服务。
本篇我主要从以下几个方面来讲解:
- Spring Boot示例
- winsw
- 拷贝&配置
- 批处理文件
- 安装并启动服务
当然,程序自制为window服务也还有其他方案,至于哪种方案更好,我只能说看应用场景吧,这里就不介绍了。
Spring Boot示例
如果是从事Java语言开发的后端工程师,我相信大家都会用Spring Boot开发一个简单的可执行程序,这里我就不多说了,我这里就假设spring boot项目打成可执行jar包的名字为demo.jar,其他语言也一样,注意,这个程序一定要是可以被执行的。
注: 根据开发语言的不同,需要提前准备好运行环境,例如:java需要jre
WinSW
这是一个window服务安装程序,下载地址: github.com/winsw/winsw 点击以上链接后打开页面,示例截图如下:
根据系统下载对应的版本
拷贝&配置
- 拷贝winsw.exe,解压并打开已经下载好的winsw,复制一份并讲winsw.exe重命名为dserver.exe,并拷贝到与demo.jar同级目录里
- 创建dserver.xml文件,用于window服务启动时读取
<service>
<id>dserver_8018</id>
<name>Demo Service</name>
<description>The demo service runs on port 8018(powered by WinSW)</description>
<logpath>logs</logpath>
<log mode="roll-by-size">
<sizeThreshold>10240</sizeThreshold>
<keepFiles>8</keepFiles>
</log>
<executable>jre/bin/demo.exe</executable>
<arguments> -jar demo.jar --server.port=8018 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms512m -Xmx512m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -Dspring.config.location=config/application.properties</arguments>
</service>
注:jre/bin/demo.exe为另外一份javaw.exe的拷贝
批处理文件
在demo.jar目录分别创建以下截图中的文件,如下截图:
- setup.bat文件,批处理命令如下:
@echo off
title installing demo service, please wait...................
dserver install dserver.xml
echo .
echo ------------ congratulations,demo service installed successfully.--------------
echo .
timeout /t 3
exit
- start.bat文件,批处理命令如下:
@echo off
title starting demo service, please wait...................
dserver start dserver.xml
echo .
echo ------------ started.--------------
echo .
timeout /t 3
exit
其他批处理文件,依次类推
注:以上所有文件必须与demo.jar目录同级,例如:文件夹名称为api,那么所有文件必须放在api目录里,包括jre等
安装&启动服务
- 点击setup.bat,弹窗后点“是”,若成功,则在服务中会出现“Demo Service”
- 点击start.bat,弹窗后点“是”,若成成,则服务的状态为“正在执行”
若安装服务失败,请检查配置文件(dserver.xml)或winsw程序与系统的兼容性,建议先看错误日志再排查。
总结
以上为spring boot程序示例,其他语言开发的程序为同样的原理,本章节分为上、中、下篇,中篇,将服务打成跟我们从网上下载下来的安装包一样,直接点击安装到系统里,例如:QQ安装包等,下篇:防止电脑重启后服务没启动,会编写一个检测服务启动状态的脚本。敬请期待~~~