Java Service Wrapper將jar包安裝成Windows服務


剛接觸java,第一次使用Java開發windows服務,也是剛不久看了SSM框架

簡直也是一頭霧水,不過只要用心理解,其實很簡單,下面有詳細的步驟,包學包會

 

在windows上運行jar包,需要在工作目錄下使用命令行運行jar包,這樣會出現一個命令行窗口

而且這個命令行窗口有可能會不小心被關閉,且服務器啟動后需要人為去點擊開啟

對於有些服務性的程序來說,我們需要將其部署為windows服務,在系統啟動的時候自動啟動

后來研究了兩種方式:

1、使用 JavaService.exe 安裝jar包

   查了很多資料,最終這種方式也是可行的,可以成功將Jar包安裝成WindowService

不過JavaService.exe的缺陷是不方便顯視的配置參數,而且安裝使用DOS命令

JavaService提供了8個參數可供選擇,這里使用-install參數安裝NT服務時還需要提供與服務相關的其它一些參數,其命令格式如下:
JavaService -install service_name jvm_library [jvm_options]
        -start start_class [-method start_method] [-params (start_parameters)]
        [-stop start_class [-method stop_method] [-params (stop_parameters)]]
        [-out out_log_file] [-err err_log_file]
        [-current current_dir]
        [-path extra_path]
        [-depends other_service]
        [-auto | -manual]
        [-shutdown seconds]
        [-user user_name -password password]
        [-append | -overwrite]
        [-startup seconds]
        [-description service_desc]

下面的命令是我自己項目中安裝NT服務:

JavaService.exe  -install  TestService   "%JAVA_HOME%"/jre/bin/server/jvm.dll    -Xmx128m   -Djava.class.path="%JAVA_HOME%"/lib/tools.jar;"%CD%"/lib/jtds-1.2.5.jar;"%CD%" -start com.azure.TestService  -method  startService  -stop  com.azure.TestService  -method stopService -out "%CD%"/log/log.log -err "%CD%"/log/error.log  -current  "%CD%"  -auto

成功安裝服務后就可以用以下命令對其進行卸載,啟動和停止操作。

        JavaService.exe -uninstall TestService

        net start TestService

        net stop TestService

這樣以后安裝升級維護也挺麻煩,DOS命令還容易出錯,不推薦,因此找了下面的第二種方式

 

2、使用 Java Service Wrapper 安裝jar包

  Java Service Wrapper使用可視的配置文件,將參數進行配置化保存,使用方便且不會增加記憶壓力

使用之前參考了如下文章:

http://www.blackzs.com/archives/679 (可參考該文章配置Artifacts,第三點以后可忽視,因為Java Service Wrapper有特定文件夾管理)

http://286.iteye.com/blog/1921414    (該文章詳細的說明了Java Service Wrapper配置文件的含義)

 

參考了之后,准備下載文件,Java Service Wrapper下載地址:http://wrapper.tanukisoftware.com/doc/english/download.jsp

由於我的服務器是64位的,在下載的時候發現64位下沒有免費版的,又擔心其他2個版本要收費,故也沒有下載其他2個版本,在網上尋找破解版的,最后在這個網址上下載了一個:

https://www.krenger.ch/blog/java-service-wrapper-3-5-14-for-windows-x64/

我下載的版本是3.5.14。

然后開始進行配置:

1.在我的服務器上新建了一個文件夾,取名 jar_jsw。

2.解壓下載的zip包。

3.在新建的文件夾jar_jsw下新建bin、conf、lib、logs文件夾,並且將需要啟動的jar包復制到jar_jsw目錄下,我的jar包為:processapp.jar

4.把解壓后的文件夾中src\bin中的文件復制到新建的jar_jsw/bin文件夾下面。並把所有文件的in后綴去掉。同時把解壓后文件夾中bin下的wrapper.exe也放到新建的bin下

5.把解壓后的文件夾中src\conf中的文件復制到新建的conf文件夾中。把in后綴去掉,其實只有一個文件,即wrapper.conf。

6.把解壓后的文件夾中lib中的wrapper.jar與wrapper.dll放到新建的lib下面。同時把啟動jar包程序所需要的第三方jar包也放在這里。

7.開始配置wrapper.conf文件。配置選項請參見其它的文章。

8.配置以后,點擊bin文件夾下面的App.bat進行測試,如果能夠在console中出現正常結果的話就表明配置正確。然后點擊InstallApp-NT.bat安裝服務,也可以點擊UninstallApp-NT.bat卸載服務。成功安裝服務后可以在window服務管理中看到。

 

注:我的jar包使用了 System.getProperty("user.dir")  來獲取工作目錄,按照默認的設置,我啟動的程序要報錯,總是報找不到文件。於是我在網上查看jsw是否有修改工作目錄的參數,最后在此進行了參考:

https://wrapper.tanukisoftware.com/doc/english/properties.html

發現有 wrapper.working.dir 這個設置,於是參考其設置:https://wrapper.tanukisoftware.com/doc/english/prop-working-dir.html

技術分享

 

當修改了工作目錄后,其對應的classpath等參數也需要做相應的變動,如上圖所示的參數。我修改之后一切OK。 

 至此,我將jar包包裝成windows服務完成。

 寫在后面,我發現activemq也是使用此方法安裝的服務。

 

異常處理

1、如果報org.tanukisoftware.wrapper.test.Main不存在。

wrapper.java.mainclass=org.tanukisoftware.wrapper.test.Main
修改成
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp

總之,如果報相關類不存在,就要仔細查看配置路徑,以及LIB是否全等。

2.、所有錯誤均記錄在log/wrapper.log下。

3、JVM did not exit on request, terminated ,如果報此錯誤說明你沒有按我上面寫的去配置,而是將主程序配置在了wrapper.java.mainclass,其實這種配置方式也可以,只是與我的寫法不一樣而已,如果你非要寫在manclass,那具體解決方案可參考:http://bbs.csdn.net/topics/90143848  查看10樓回答。

4、There were 5 failed launches in a row, each lasting less than 300 seconds.  Giving up。此錯誤是由於配置主方法導致的,注意wrapper.app.parameter.1的路徑以及是否去掉了它前面的#。

 

原文:http://www.bubuko.com/infodetail-2169827.html  (本文加了一些補充)  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM