【JavaService】部署Java jar为Windows后台服务

  将Java jar文件部署为Windows后台服务有多种方法:Service Installer、Java service Wrapper、JavaService.exe等等。这里介绍下使用JavaService.exe来部署windows后台服务的方法。

1. 下载JavaService.exe, 最新的是2.0.10版本,请下载其zip包版本的即可
forge.ow2.org/projects/javaservice/

2. 安装JavaService.exe
   将下载的zip包解压缩到任意目录即可

3. 编译一个测试jar(请从附件中下载): 每天11:00:00向time.log文件中写入当前时间

Java代码  收藏代码
  1. public static void main(String[] args) {  
  2.   
  3.         // schedule task执?  
  4.         scheduler.schedule(new SchedulerTask() {  
  5.             public void run() {  
  6.                 // TODO  
  7.                 FileOutputStream writerStream = null;  
  8.                 OutputStreamWriter outSW = null;  
  9.                 try {  
  10.                     writerStream = new FileOutputStream("F:/TestTimer/time.log");     
  11.                     outSW = new OutputStreamWriter(writerStream, "UTF-8");  
  12.                     //将缓冲对文件的?出  
  13.                     final SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");  
  14.                       
  15.                     outSW.write(sdf.format(new Date()));  
  16.   
  17.                 } catch (final IOException e) {  
  18.                     e.printStackTrace();  
  19.                 } finally {  
  20.                     try {                 
  21.                             // 向缓冲区写成功后?执?缓冲区刷新?使文件内容生效  
  22.                             if (outSW != null) {  
  23.                                 outSW.close();  
  24.                             }  
  25.                             //关?文件流  
  26.                             if (writerStream != null) {   
  27.                                 writerStream.close();  
  28.                             }  
  29.                           
  30.                     } catch (final IOException e) {  
  31.                         e.printStackTrace();  
  32.                     }  
  33.   
  34.                 }  
  35.             }  
  36.         }, new DailyIterator(11, 0, 0));  
  37.     }  



4. 在jar文件所在的目录下,建立如下批处理文件,执行后即可完成服务的注册和auto start

Java代码  收藏代码
  1. @echo off  
  2.   
  3. rem 修改控制台颜色  
  4. color 1d  
  5.   
  6. rem * 使用JavaService将TestTimer安装为Windows服务的脚本  
  7. rem *  
  8. rem * JavaService - Windows NT Service Daemon for Java applications  
  9. rem * Copyright (C) 2006 Multiplan Consultants Ltd. LGPL Licensing applies  
  10. rem * Information about the JavaService software is available at the ObjectWeb  
  11. rem * web site. Refer to http://javaservice.objectweb.org for more details.  
  12.   
  13. rem 开始批处理文件中环境改动的本地化操作,在使用endlocal后环境将恢复到原先的内容  
  14. SETLOCAL  
  15.   
  16. rem 设置环境变量,指向当前路径  
  17. SET BASE_PATH=%CD%  
  18.   
  19. rem 设置Java path: jre_home  
  20. SET JRE_HOME=D:Program FilesJavajre1.5.0_11  
  21.   
  22. rem 判断JRE_HOME是否正确  
  23. if "%JRE_HOME%" == "" goto no_java  
  24. if not exist "%JRE_HOME%injava.exe" goto no_java  
  25.   
  26. rem 设置jvm内存分配情况  
  27. set JVM_MEMORY=-Xms128m -Xmx256m   
  28.   
  29. rem 设置jvmdll使用哪一种模式  
  30. SET jvmdll=%JRE_HOME%inclientjvm.dll  
  31. if not exist "%jvmdll%" SET jvmdll=%JRE_HOME%inhotspotjvm.dll  
  32. if not exist "%jvmdll%" goto no_java  
  33.   
  34. rem 设置JavaService路径  
  35. set JSBINDIR=E:AccountingTooljavaserviceJavaService-2.0.10  
  36. set JSEXE=%JSBINDIR%JavaServiceDebug.exe  
  37.   
  38. rem 判断jar是否正确  
  39. SET acctjar=%BASE_PATH%TestTimer.jar  
  40. if not exist "%acctjar%" goto no_peer  
  41.   
  42. @echo . Using following version of JavaService executable:  
  43. @echo .  
  44. "%JSEXE%" -version  
  45. @echo .  
  46.   
  47. rem parameters and files seem ok, go ahead with the service installation  
  48. @echo .  
  49.   
  50. rem 处理该批处理的输入参数,后台服务启动模式:自动  
  51. SET svcmode=  
  52. if "%1" == "-manual" SET svcmode=-manual  
  53. if "%1" == "-auto" SET svcmode=-auto  
  54.   
  55.   
  56. rem 设置JAVA_OPTS  
  57. set JAVA_OPTS=%JAVA_OPTS% -Djava.class.path="%BASE_PATH%TestTimer.jar"  
  58. set JAVA_OPTS=%JAVA_OPTS% %JVM_MEMORY%  
  59.   
  60. rem 设置startstop  
  61. SET START_STOP=-start cn.test.timer.TestTimer  
  62.   
  63.   
  64. rem 设置Log文件路径  
  65. set OUT_ERR=-out "%BASE_PATH%service_out.log" -err "%BASE_PATH%service_err.log"  
  66.   
  67. rem 设置desp  
  68. set DESP=-description "TestTimer Service"   
  69.   
  70. rem 设置执行命令行  
  71. set runcmd="%JSEXE%" -install TestTimerService  
  72. set runcmd=%runcmd% "%jvmdll%"  
  73. set runcmd=%runcmd% %JAVA_OPTS%  
  74. set runcmd=%runcmd% %START_STOP%  
  75. set runcmd=%runcmd% %OUT_ERR%  
  76. set runcmd=%runcmd% -current  
  77. set runcmd=%runcmd% "%BASE_PATH%"  
  78. set runcmd=%runcmd% %svcmode%  
  79. set runcmd=%runcmd% -overwrite  
  80. set runcmd=%runcmd% -startup 6  
  81. set runcmd=%runcmd% %DESP%  
  82. echo %runcmd%  
  83.   
  84. rem 执行安装命令  
  85. %runcmd%  
  86.   
  87. rem 启动服务  
  88. net start TestTimerService  
  89.   
  90. if ERRORLEVEL goto js_error  
  91.   
  92. goto end  
  93.   
  94. :no_java  
  95. @echo . 没有Java运行环境,安装脚本不能运行  
  96. goto error_exit  
  97.   
  98. :no_peer  
  99. @echo . 启动文件TestTimer.jar不存在,安装脚本不能运行  
  100. goto error_exit  
  101.   
  102.   
  103. :no_jsexe  
  104. @echo . 可执行文件JavaService.exe 不存在,安装脚本不能运行  
  105. goto error_exit  
  106.   
  107.   
  108. :js_error  
  109. @echo . TestTimerService在安装为服务的过程中发生了错误,请检查相关日志文件  
  110. goto error_exit  
  111.   
  112. :error_exit  
  113.   
  114. @echo .  
  115. @echo . 安装失败,不能将 TestTimer安装为Windows服务  
  116. @echo .  
  117. @echo . 命令格式:  
  118. @echo .  
  119. @echo .  %~n0 [-auto / -manual] [-np]  
  120. @echo .  
  121. @echo . 其中:  
  122. @echo .  -auto (默认) or -manual 参数说明了服务的启动模式:自动或者手动  
  123. @echo .  -np 批处理命令执行完毕后不暂停  
  124. @echo .  
  125. @echo . 比如:  
  126. @echo .  %~n0 -auto -np  
  127.   
  128. :end  
  129. ENDLOCAL  
  130. @echo .  
  131. if "%2" NEQ "-np" @pause  


注意: 其中JRE_HOME 和 JSBINDIR(javaservice路径) 视安装路径而异。

5. 停止并卸载服务的批处理文件,其中service 名称必须与上面注册的service名称一致

Java代码  收藏代码
    1. @echo off  
    2.   
    3. rem 修改控制台颜色  
    4. color 1d  
    5.   
    6. rem * 使用JavaService卸载TestTimerService服务的脚本  
    7. rem *  
    8. rem * JavaService - Windows NT Service Daemon for Java applications  
    9. rem * Copyright (C) 2006 Multiplan Consultants Ltd. LGPL Licensing applies  
    10. rem * Information about the JavaService software is available at the ObjectWeb  
    11. rem * web site. Refer to http://javaservice.objectweb.org for more details.  
    12.   
    13. rem 开始批处理文件中环境改动的本地化操作,在使用endlocal后环境将恢复到原先的内容  
    14. SETLOCAL  
    15.   
    16. rem 设置环境变量  
    17. SET BASE_PATH=E:AccountingToolReleaseAccountingTool  
    18.   
    19. rem 设置JavaService的路径  
    20. set JSBINDIR=%BASE_PATH%JavaService-2.0.10  
    21. set JSEXE=%JSBINDIR%JavaService.exe  
    22.   
    23. rem 卸载服务前先停止服务  
    24. net stop TestTimerService  
    25.   
    26. rem 设置执行命令行  
    27. set runcmd="%JSEXE%" -uninstall TestTimerService  
    28.   
    29. %runcmd%  
    30.   
    31. @echo .  
    32.   
    33. ENDLOCAL  
    34. @echo .  
    35. if "%2" NEQ "-np" @pause 
原文地址:https://www.cnblogs.com/hyl8218/p/5084887.html