Java Service Wrapper實踐
當我們用JAVA來寫后臺服務器的時候,當服務器啟動務必會出現一個黑框框。為了消除這個黑框框以及黑框框帶來的一些不利條件,使用Java Service Wrapper將其制作成標準的WINDOWS NT服務是有必要的。
很久前就使用JAVA寫了一個后臺服務器,基于MINA框架的。并且一直部署運行于服務器中,當然有一個黑框框。
就正常運行而言,此種運行方式沒有任何問題。
但是就這運行期間出現的一些問題:
1,服務器問題重啟后,每次都要登錄遠程將服務器打開,即使我已經配置了開機自啟動,但是由于黑框框是基于界面運用的,每次必須要完成系統啟動畫面之后該黑框框才能啟動。所以即使設置成了開機自啟動,每次服務器維護重啟后,都需要登錄一下遠程出發系統加載。
2,有個黑框框總顯低端些,并且容易不小心被關閉。
基于以上問題,加之以前就對Java Service Wrapper有所涉獵,但并未實踐,所以利用一點時間來將服務器打包成WINDOWS NT服務。
關于Java Service Wrapper的介紹在此就不鰲訴了,http://wrapper.tanukisoftware.com/doc/english/download.jsp
本人最簡單的了解,就是將JAVA應用打包成標準的WINDOS(當然也包含linux,在此僅以windows為例)服務。
Java Service Wrapper的Standard,Professional版本是需要license的,通俗的說是要收費,但是Community版本不需要,至于版本之間的區別我想對我影響不大,所以沒有深究。就用Community版本吧。
下載下來后解壓:
圖一
我現有的項目很簡單:

圖二
server-server-1.0.0-release.jar是還行文件,libs/下是運行時所需要的依賴包,log是日志保存目錄,conf是配置文件目錄。
要使用Java Service Wrapper首先需要
(1)將圖一中lib目錄下的wrapper.dll、wrapper.jar拷貝到圖二中的libs下。
(2)將圖一中bin目錄下的wrapper.exe文件拷貝到圖二中當前目錄下,該文件是將java應用打包成對應平臺服務的可執行文件
(3) 將圖一中src/conf目錄下的wrapper.conf.in文件拷貝到圖二中conf下并將.in后綴去掉,wrapper.conf.in文件是 一個標準的配置模板,用來配置Java Service Wrapper的,配置的內容就是項目目錄結構、依賴關系、啟動、jvm性能、日志、異常處理等等,稍微看一下應該就很容易理解。
(4)將圖一中src/bin 目錄下的AppCommand.bat.in文件拷貝到圖二中的當前目錄下并將.in后綴去掉。該文件是一個基于命令行的可執行文件,可以用于對相應的服 務執行start,install,uninstall,pause,resume,stop等命令。
完成以上操作后,我的項目目錄如下:
具體目錄結構:
+conf
-wrapper.conf
+libs
-wrapper.dll
-wrapper.jar
+log
AppCommand.bat
server-server-1.0.0-release.jar
wrapper.exe
接下來也是最重要的一步就是配置wrapper.conf文件
主要修改的有以下幾點;
(1)類加載路徑Java Classpath
# Java Classpath (include wrapper.jar) Add class path elements as
# needed starting from 1
wrapper.java.classpath.1=server-server-1.0.0-release.jar
wrapper.java.classpath.2=libs/wrapper.jar
(2)動態庫加載路徑Java Library Path
# Java Library Path (location of Wrapper.DLL or libwrapper.so)
wrapper.java.library.path.1=libs
(3)需要運行的應用主類以及啟動參數Application parameters
wrapper.app.parameter.1=cn.iever.wxh.yjserver.server.App //我的應用主類wrapper.app.parameter.2=-h120 //應用參數
(4)日志輸出文件Log file to use for wrapper output logging.
# Log file to use for wrapper output logging.wrapper.logfile=log/wrapper.log
(5)服務描述Wrapper Windows NT/2000/XP Service Properties
# Name of the service
wrapper.name=SmartHome
# Display name of the service
wrapper.displayname=Smart Home Service
# Description of the service
wrapper.description=Yong Jing Smart Home Service
wrapper的配置文件模板中給出的其他配置我基本采用默認,還沒有深入去對各個配置信息進行研究,但是以上配置已經可以基本符合我的需求。
接下來需要修改一下AppCommand.bat文件
主要將文件內容中的set _WRAPPER_CONF="conf/%_WRAPPER_BASE%.conf"進行修改,即設定配置文件所以在路徑。
到此一切準備工作以及配置也都完成了。
打開cmd執行AppCommand.bat install命令安裝服務
同時相應的服務我們已經可以在系統服務中查詢到

同理我們執行AppCommand.bat stop/remove/pause等命令也都可以對該服務進行操作,當然也可以執行在系統服務中對服務進行操作。
至此我就使用Java Service Wrapper將我的java應用打包成了后臺服務。
當然實踐是完成了,關于Java Service Wrapper還有其他一些東西需要繼續深入研究 尤其是關于wrapper.conf文件的配置。。
來自:http://my.oschina.net/yjwxh/blog/260835