天天看點

使用winsw将springboot打包的jar注冊系統本地服務

1、下載下傳winsw

下載下傳位址:https://github.com/kohsuke/winsw/releases

我這裡下載下傳的是2.3.0版。

使用winsw将springboot打包的jar注冊系統本地服務

下載下傳sample-minimal.xml和WinSW.NET4.exe兩個檔案。

使用winsw将springboot打包的jar注冊系統本地服務

2、将三個檔案放在同一個檔案夾中

WinSW.NET4.exe

sample-minimal.xml

springboot jar包

使用winsw将springboot打包的jar注冊系統本地服務

3、修改檔案名字

需要将winsw執行程式跟xml改成同樣的名字,推薦使用項目名+Service的命名方式,比如:

WinSW.NET4.exe修改為rexel-middleware-0.0.1.exe

sample-minmal.xml修改為rexel-middleware-0.0.1.xml

使用winsw将springboot打包的jar注冊系統本地服務

4、編輯xml檔案

使用winsw将springboot打包的jar注冊系統本地服務

 配置内容

<configuration>
  <!--安裝成Windows服務後的服務名-->
  <id>rexel-middleware</id>
  <!--顯示的服務名稱-->
  <name>rexel-middleware</name>
  <!--對服務的描述-->
  <description>rexel-middleware for hzzg project</description>
  <!--這裡寫java的路徑,如何配置了環境變量直接寫"java"就行-->
  <executable>java</executable>
  <!---jar後面的是項目名,可以配置記憶體限制如-Xmx256m代表堆記憶體最大值為256MB -->
  <arguments>-jar rexel-middleware-0.0.1.jar</arguments>
  <!--日志模式-->
  <logmode>rotate</logmode>
</configuration>
      

5、執行指令安裝服務

打開系統指令行視窗,進入到rexel-middleware-0.0.1.exe所在檔案夾,

然後執行指令安裝服務指令:rexel-middleware-0.0.1.exe install。

執行發現報錯如下:

使用winsw将springboot打包的jar注冊系統本地服務

錯誤日志:

D:\MyWork\22_Github\rexel-cn\rexel-jarvis\rexel-middleware\install>rexel-middleware-0.0.1.exe install
2019-12-02 10:25:24,938 INFO  - Installing the service with id 'myapp'
2019-12-02 10:25:24,964 FATAL - WMI Operation failure: AccessDenied
WMI.WmiException: AccessDenied
   在 WMI.WmiRoot.BaseHandler.CheckError(ManagementBaseObject result)
   在 WMI.WmiRoot.ClassHandler.Invoke(Object proxy, MethodInfo method, Object[] args)
   在 winsw.WrapperService.Run(String[] _args, ServiceDescriptor descriptor)
   在 winsw.WrapperService.Main(String[] args)
WMI.WmiException: AccessDenied
   在 WMI.WmiRoot.BaseHandler.CheckError(ManagementBaseObject result)
   在 WMI.WmiRoot.ClassHandler.Invoke(Object proxy, MethodInfo method, Object[] args)
   在 winsw.WrapperService.Run(String[] _args, ServiceDescriptor descriptor)
   在 winsw.WrapperService.Main(String[] args)
      

解決方法:

使用管理者權限重新打開cmd視窗,重新執行rexel-middleware-0.0.1.exe install

使用winsw将springboot打包的jar注冊系統本地服務

6、啟動服務

指令提示符界面輸入指令啟動服務。

指令:net start rexel-middleware

使用winsw将springboot打包的jar注冊系統本地服務

7、檢視是否啟動成功

打開系統服務功能:運作——輸入services.msc

即可看見自己命名的服務rexel-middleware。

使用winsw将springboot打包的jar注冊系統本地服務

我的java程式是一個從外部接口定時拉取資料,并寫入到mysql的程式,

可以看到已經在開始寫入資料了,證明程式運作成功。

使用winsw将springboot打包的jar注冊系統本地服務

8、重新開機測試

重新開機電腦後該服務會自動啟動,執行第6步(net start rexel-middleware)可檢查是否成功。

9、删除服務

分為兩步:

步驟1:停止服務

指令提示符界面輸入指令停止運作服務:net stop rexel-middleware

使用winsw将springboot打包的jar注冊系統本地服務

步驟2:删除服務

指令提示符界面輸入指令可删除服務:rexel-middleware-0.0.1.exe uninstall

使用winsw将springboot打包的jar注冊系統本地服務

10、修改為批處理檔案

上面所有的指令都可以寫在批處理檔案中,部署的時候就可以實作一鍵部署了。

例如start.bat内容如下:

rexel-middleware-0.0.1.exe install
net start rexel-middleware
      

例如stop.bat内容如下:

net stop rexel-middleware
rexel-middleware-0.0.1.exe uninstall
      

--END--