標籤:zip 存在 服務管理 data 尾碼 選擇 一個 其它 1.2
剛接觸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 (本文加了一些補充)
Java Service Wrapper將jar包安裝成Windows服務