java程式很多情況下是作為服務程式運作的,在un*x平台下可以利用在指令後加“&”把程式作為背景服務運作,但在windows下看作那個console視窗在桌面上,你是否一直擔心别的同時把你的console視窗關閉?是否懷念用vc寫的win32服務程式?
翻開jboss、tomcat的釋出包,發現他們都使用了一個open source——java service wrapper。用java service wrapper可以輕松解決我們的需求,讓我們的服務程式成為 win32系統服務。
當然,在un*x下也可以使用java service wrapper,可以避免加“&”的粗暴方式,導緻每天收到一堆mail,通過java service wrapper提供的日志方式檢視運作資訊。
java servicewrapper功能很強大,同時支援windows及un*x平台,提供三種方式把你的java程式包裝成系統服務,這裡隻介紹最簡單的一種方式,因這種方式無需對已有的服務程式作任何改變,僅僅增加幾個script、配置檔案就可以把你的java服務程式改造成系統服務程式了。
當然在使用之前需要到http://sourceforge.net/project/showfiles.php?group_id=39428下載下傳java service wrapper的釋出包。
下面簡單介紹一下具體的使用步驟:
1. 将下載下傳的java service wrapper包解壓到本地,目錄為{wrapper_home};
2. 服務應用程式名為myservapp,在目錄d:\myservapp下建立bin、conf、logs、lib目錄;并把你的已有應用程式如nioblockingserver.class拷貝到該目錄下;
3. 将{wrapper_home}\src\bin\下的遺以下檔案拷貝到myservapp目錄下,并重命名。
{wrapper_home}\bin\wrapper.exe ? c:\ myservapp \bin\wrapper.exe
{wrapper_home}\src\bin\app.bat.in ? c:\ myservapp\bin\myapp.bat
{wrapper_home}\src\bin\installapp-nt.bat.in ? c:\ myservapp\bin\installmyapp-nt.bat
{wrapper_home}\src\bin\uninstallapp-nt.bat.in ? c:\ myservapp\bin\uninstallmyapp-nt.bat
4. 将{wrapper_home}\lib下的以下檔案拷貝到c:\ myservapp \lib目錄下
{wrapper_home}\lib\wrapper.dll
{wrapper_home}\lib\wrapper.jar
5. 将{wrapper_home}\src\conf\wrapper.conf.in拷貝到c:\ myservapp \conf目錄下并命名為wrapper.conf;并修改wrapper.conf檔案,在其中配置您的應用服務。
主要修改以下幾項即可:
#你的jvm位置:
wrapper.java.command=d:\sun\j2sdk1.4.0_03\bin\java
#運作參數:如:
wrapper.java.additional.1=-dprogram.name=run.bat
#classpath:
wrapper.java.classpath.1=../lib/wrapper.jar
wrapper.java.classpath.2=../bin/.
# java library path (location of wrapper.dll or libwrapper.so)
wrapper.java.library.path.1=../lib
#main class 此處決定了使用java service wrapper的方式
wrapper.java.mainclass=org.tanukisoftware.wrapper.wrappersimpleapp
#你的java應用類
wrapper.app.parameter.1= nonblockingserver
# 服務名
wrapper.ntservice.name=nb
# display name of the service
wrapper.ntservice.displayname=nio nonblocking server
# 服務描述
wrapper.ntservice.description=nio nonblocking server
其他的配置根據你的需要改變即可
6. 對以上配置的myapp.bat進行測試,運作myapp.bat,就像在console視窗下運作tomcat一樣;
7. 對以上配置的服務進行測試,運作c:\ myservapp\bin\installmyapp-nt.bat将把你的應用(此處為nioblockingserver)安裝到win32系統服務中了。
8. 打開控制台-管理程式-服務,看到nio nonblocking server已經在系統服務中了,其他用法就與我們熟悉的windows服務一樣了。
tomcat使用的是java servicewrapper模式二,這種方式需要對已有的程式進行小的改動,但可以通過socket端口的方式控制服務程式核心的啟動,更加靈活。javaservice wrapper提供的模式三比較複雜,需要作出更多的編碼,我沒有研究。
采用模式一,即可簡單有效的把我們的服務程式包裝成為系統服務程式,并增強了日志功能,我們可以把myservapp的幾個檔案做成模闆,每次修改檔案名,配置檔案就可以了,有精力的朋友更可以做成eclipse的plugin,滑鼠點點就把應用配成服務了。