| 把Java程序安装为Windows 系统服务的完整例子 |
|
xiaoyuer 原创 更新:2008-03-20 09:34:51 版本: 1.0
|
|
首先我们写一下小程序:
- package com.main;
-
- import org.apache.log4j.Logger;
-
- public class Start {
- private static Thread thread=null;
- private static Logger logger=Logger.getLogger(Start.class);
- /**
- * 退出方法(在批处理文件中要用到这个方法名,这个方法必须有 String [] args)
- * @param args
- */
- public static void systemExit(String [] args){
- System.out.println("System exit.");
- thread.interrupt();
- logger.info("System exit.");
- }
- /**程序入口
- * @param args
- */
- public static void main(String[] args) {
- System.out.println("Start");
- //为了不让服务自动退出,我们写一个小线程,在这里一直跑着
- thread=new Thread(new Service());
- thread.start();
- logger.info("Thread Start.");
- }
- }
- class Service implements Runnable{
- private static Logger logger=Logger.getLogger(Service.class);
- @Override
- public void run() {
- while(true){
- System.out.println("running....");
- logger.info("running....");
- try {
- Thread.sleep(10*60*1000);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
以下是安装服务的批处理文件内容:
@echo off rem 可以在这里指定JAVA_HOME,如:set JAVA_HOME="D:\Program Files\Java\jdk1.6.0" if "%JAVA_HOME%" == "" goto ERROR
rem 设置服务名 set SERVICE_NAME=JavaServices rem 设置启动类 set STRAT_CLASS=com.main.Start rem 设置日志路径 set LOG_PATH=%CD%\logs rem 设置JMX,如果不启用JMX,可以直接设置为 set JMX_SETTING="" set JMX_SETTING="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8004 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
setlocal EnableDelayedExpansion
rem 指定主类的classpath set CLASSPATH=.;./bin rem 通过for循环lib目录下的所有jar及zip文件名来组成classpath for /F %%a in ('dir lib\*.jar lib\*.zip /b') do set CLASSPATH=!CLASSPATH!;lib\%%a
echo "JAVA_HOME:%JAVA_HOME%" echo "服务名:%SERVICE_NAME%" echo "CLASSPATH:%CLASSPATH%" echo "日志路径:%LOG_PATH%" rem 停止服务 net stop %SERVICE_NAME% rem 卸载服务 JavaServices.exe -uninstall %SERVICE_NAME% @pause rem 如果日志的路径不存在,则创建日志 if not exist "%LOG_PATH%" mkdir "%LOG_PATH%" rem 安装服务 JavaServices.exe -install %SERVICE_NAME% "%JAVA_HOME%\jre\bin\server\jvm.dll" "%JMX_SETTING%" -Dserver -Xms256m -Xmx512m -XX:SurvivorRatio=4 -XX:+UseParallelGC -Djava.class.path=%CLASSPATH% -start %STRAT_CLASS% -method main -params service -stop %STRAT_CLASS% -method systemExit -out "%LOG_PATH%\out.log" -err "%LOG_PATH%\err.log" -current "%CD%" -auto rem 启动服务 net start %SERVICE_NAME% @pause goto END
:ERROR echo "系统中没有设置JAVA_HOME,请在环境变量中设置JAVA_HOME或者在这个文件的开头部份设置......................" goto END
:END
以下是完整的例子: 附件:WinServices.rar(369K)
|
|
|
评论人:zjy780108
|
发表时间: Thu Mar 20 10:11:33 CST 2008
|
|
不错的想法和做法!
|
|
|
评论人:kingzgh
|
发表时间: Thu Mar 20 12:35:00 CST 2008
|
|
非常不错!!!!!!!
|
|
|
评论人:joy_js
|
发表时间: Fri Mar 28 11:32:18 CST 2008
|
相当不错
|
|
|
评论人:xndx
|
发表时间: Sat Mar 29 16:31:14 CST 2008
|
学习一下
|
|
|
评论人:c4lijie
|
发表时间: Tue Apr 08 17:06:44 CST 2008
|
晚上回家试试~~~有趣.....呵呵
|
|
|
评论人:ancestor
|
发表时间: Sun Jun 01 20:54:47 CST 2008
|
|
这样的实现方式不错!也可以通过JNI来做
|
|
|
评论人:wjason
|
发表时间: Wed Jun 11 10:47:33 CST 2008
|
|
好极了,还有代码示例
|
|
|