天天看點

使用Java Service Wrapper 把Java程式作為Windows系統服務

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,滑鼠點點就把應用配成服務了。