springboot项目的可执行jar以后台本地服务的方式运行在Windows机器上


前段时间遇到一个项目,需要我们提供一个驱动控件,可以以后台服务的方式运行在Windows机器上。开始寻找各种解决办法。
最后发现一个不错的解决方式。分享给大家一下。

用到的工具

链接:https://pan.baidu.com/s/1QNnMgGF--lEQ8aFk5k8OUQ 
提取码:xjmg

先上一个效果图

在这里插入图片描述

准备可执行文件

我这里的是 scan-xxx-server.jar 只要这个文件 在Windows上 java -jar xxxx.jar命令下,可以启动就行。
但是这种java -jar的方式,客户端侧一旦关闭 cmd窗口 就服务停止了。接下来讲解怎么以后台服务的形式运行。
先上张图:
在这里插入图片描述
bin目录下:放的是
在这里插入图片描述
通过 允许 wrapper.exe程序 来加载配置文件wrapper.conf进而启动jvm和并将指定的服务注册到本地服务中。
conf目录下
在这里插入图片描述
这个配置文件的重点部分如下:

wrapper.java.command=java
wrapper.java.command=../jre/bin/java.exe
wrapper.java.command.loglevel=INFO
wrapper.java.classpath.1=../lib/wrapper.jar
wrapper.java.classpath.2=../mylib/*.jar  #自己的可执行文件的jar及其依赖的包位置
wrapper.java.library.path.1=../lib       #需要的dll库放到这里,好像不太生效,项目中使用了JNI,用到的dll库放到了 jre\\bin目录下了
wrapper.logfile=../logs/wrapper.log  #服务中打印的日志存放位置
wrapper.logfile.loglevel=INFO  #文件日志中的日志级别
wrapper.name=ScanServer  # 服务名称
wrapper.displayname=ScanServer # 服务名称 和上一个都写一样就行,具体不太清楚区别
wrapper.description=某某服务控件 # 本地服务的描述信息
wrapper.ntservice.starttype=AUTO_START    #选择这个会注册服务为自动,下次开机 服务会自启。(但是首次注册还是要通过命令启动,下面bat脚本里有启动命令说明)

关于配置文件中的主类要格外注意,并不是指的自己可执行文件中的那个启动类。
要按下面来配:

# Java Main class.  This class must implement the WrapperListener interface
#  or guarantee that the WrapperManager class is initialized.  Helper
#  classes are provided to do this for you.  See the Integration section
#  of the documentation for details.
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
# wrapper.app.parameter.1=cn.com.yuanquanyun.controller.platform.CustomerApplication
# springboot
wrapper.app.parameter.1=org.springframework.boot.loader.JarLauncher
# wrapper.app.parameter.1=cn.com.jit.bootstrap.ScanClientServerApplication

jre目录下
在这里插入图片描述
这个就是java项目运行环境jre。项目中用到的dll或者so库可以直接放到jre/bin目录下。
lang目录下
暂时为空,应该放语言包之类的东西,不影响服务运行。
lib目录下
在这里插入图片描述
这里放的是wrapper.exe允许时,需要的必要依赖。
log目录下
在这里插入图片描述
这个就是存放日志的地方。
mylib目录下
在这里插入图片描述
这个地方就是存放 要注册为本地服务的可执行文件
这个upkcs11.ini文件暂且不用管,放到里面就行。
在这里插入图片描述
启动脚本
主要用到的是 服务注册启动脚本.bat

SC QUERY "ScanServer" > NUL
IF not ERRORLEVEL 1 GOTO EXIST
  GOTO NOTEXIST
:NOTEXIST
ECHO not exist "ScanServer" service
echo 创建Windows服务
bin\wrapper.exe -i ..\conf\wrapper.conf
:echo 修改服务的描述 -- 用不到了 配置文件加了描述
:sc description ScanServer "石化扫码签控件"
echo 启动服务
net start ScanServer

GOTO END

:EXIST
ECHO 服务已存在
ECHO exist "ScanServer" service
GOTO END

:END
echo 键盘上随意按一个键退出&pause>nul

注意在bat脚本中 : 有两个含义。
一种是 GOTO 后面 需要跳到的地方。
另一种是 注释。也就是 不执行。
是哪一种含义 一般 :后是大写的一般都有对应的 GOTO 后的标识与其对应。
这里如果想要执行完自动关闭 cmd窗口 最后只需改为
:END
:退出
exit

注册及启动服务

在这里插入图片描述
Ctrl + R 后,在输入框中输入 services.msc 打开本地服务列表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

如果发现描述或者服务名称错误了。
只能删除服务,然后重启再注册。
如果服务在启动状态下,先 执行 net stop 服务名。然后 执行 sc delete 服务名。
在这里插入图片描述
刷新服务列表就看不到这一条服务了。

猜你喜欢

转载自blog.csdn.net/adminstate/article/details/134400183