zoukankan      html  css  js  c++  java
  • 【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 
  • 相关阅读:
    实验 4:Open vSwitch 实验——Mininet 中使用 OVS 命令
    实验 3:Mininet 实验——测量路径的损耗率
    福州大学软件工程实践个人编程作业
    实验 2:Mininet 实验——拓扑的命令脚本生成
    实验 1:Mininet 源码安装和可视化拓扑工具
    2020软件工程实践第一次作业
    魏迟燕的自走棋
    中位数之最
    A Simple Math Problem
    数字的升级准则
  • 原文地址:https://www.cnblogs.com/hyl8218/p/5084887.html
Copyright © 2011-2022 走看看