JR 精品文章 - 把Java程序安装为Windows 系统服务的完整例子
AD: jr (at) javaresearch.org


首页 | 动态 | 文章 | FAQ  | 新闻 | 下载 | 代码 | 工作 | 调查 | 术语 | 站点 | 图书 | 论坛 | 帮助 | 全部  

TOP | 交流 | 软件 | 专栏 | 开源 | 译/著 | 源码 | API  | 推荐 | FTP  | 积分 | 统计 | 搜索 | Blog | 我们  
首页 » 研究文集 » J2SE综合 搜索标题相关文章 搜索标题相关文章    评论此文章 发表评论     开始监控此文章 开始监控   加入收藏夹  加入收藏夹
把Java程序安装为Windows 系统服务的完整例子
xiaoyuer 原创   更新:2008-03-20 09:34:51  版本: 1.0   


首先我们写一下小程序:
  1. package com.main;
  2. import org.apache.log4j.Logger;
  3. public class Start {
  4.     private static Thread thread=null;
  5.     private static Logger logger=Logger.getLogger(Start.class);
  6.     /**
  7.      * 退出方法(在批处理文件中要用到这个方法名,这个方法必须有 String [] args)
  8.      * @param args
  9.      */
  10.     public static void systemExit(String [] args){
  11.         System.out.println("System exit.");
  12.         thread.interrupt();
  13.         logger.info("System exit.");
  14.     }
  15.     /**程序入口
  16.      * @param args
  17.      */
  18.     public static void main(String[] args) {
  19.         System.out.println("Start");
  20. //为了不让服务自动退出,我们写一个小线程,在这里一直跑着
  21.         thread=new Thread(new Service());
  22.         thread.start();
  23.         logger.info("Thread Start.");
  24.     }
  25. }
  26. class Service implements Runnable{
  27.     private static Logger logger=Logger.getLogger(Service.class);
  28.     @Override
  29.     public void run() {
  30.         while(true){
  31.             System.out.println("running....");
  32.             logger.info("running....");
  33.             try {
  34.                 Thread.sleep(10*60*1000);
  35.             } catch (InterruptedException e) {
  36.                 e.printStackTrace();
  37.             }
  38.         }            
  39.     }        
  40. }


以下是安装服务的批处理文件内容:

@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) 

版权声明   给作者写信
本篇文章对您是否有帮助?  投票:         投票结果:     21       0
作者其它文章: 作者全部文章
评论人: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
相当不错[:E]
评论人:xndx 发表时间: Sat Mar 29 16:31:14 CST 2008
学习一下[:)]
评论人:c4lijie 发表时间: Tue Apr 08 17:06:44 CST 2008
[:?]晚上回家试试~~~有趣.....呵呵
评论人:mowanghaohao 发表时间: Fri Apr 18 15:15:25 CST 2008
好极了 
评论人:ancestor 发表时间: Sun Jun 01 20:54:47 CST 2008
这样的实现方式不错!也可以通过JNI来做
评论人:wjason 发表时间: Wed Jun 11 10:47:33 CST 2008
好极了,还有代码示例

这个文章共有 8 条评论
主题: 在Java中操作扫描仪(使用JNI) 上一篇文章
返回文章列表 返回〔J2SE综合〕
下一篇文章 主题: 表达式计算: 分析与设计2(增加boolean表达式的实现)


文字广告链接
        自主、快速定制基于JAVA的B/S业务系统          重量级企业在线自定义WEB报表平台
        Excel制表、零代码发布、打印、图表结合——快逸报表,免费、稳定、功能强大的java工具
        技术圈: 关于Java、dotNet、PHP、Ruby、奇客、Web2.0等更多资讯博客精选文章

关于 JR  |  版权声明  |  联系我们 

©2002-2006 JR 版权所有 沪ICP备05019622号