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



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

    用到的工具

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

    先上一个效果图

    在这里插入图片描述

    准备可执行文件

    我这里的是 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脚本里有启动命令说明)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

    # 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

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

    注册及启动服务

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

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

  • 相关阅读:
    el-tree中展示项换行展示
    Redis支撑秒杀场景的关键技术和实践都有哪些?
    用VB设计年级人员管理系统
    38.cuBLAS开发指南中文版--cuBLAS中的Level-2函数her2()
    uniapp风险等级(三级)
    谈谈你对AOP的理解
    数据提取的艺术:如何通过数据治理提高效率
    microk8s 报错tls: failed to verify certificate: x509:
    自定义MVC
    Linux删除3天前的归档日志文件
  • 原文地址:https://blog.csdn.net/adminstate/article/details/134400183