将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文件中写入当前时间

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

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

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

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

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

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

【JavaService】部署Java jar为Windows后台服务的更多相关文章

  1. 使用instsrv.exe和srvany.exe将应用程序安装成windows后台服务

    好的参考链接: http://www.jb51.net/softjc/374631.html 利用这两个工具,将 exe程序或者 bat文件,做成Windows后台服务.

  2. java程序在windows后台执行的办法

    1.新建run.txt文件 2.在文件中输入一下内容: @echo off start javaw -jar xx.jar exit 3.保存,修改文件名为run.bat4.双击即可 5.删除wind ...

  3. jar 在windows 启动服务,卸载服务,停止端口

    参考:https://www.cnblogs.com/zhuchunlei/p/9469569.html 1,启动服务  install.bat @echo off SET JAVA_HOME=&qu ...

  4. 番外篇:使用nssm工具将ES、Kibana、Logstash或者其他.bat文件部署为Windows后台服务的方法

    使用NSSM工具安装bat文件为Windows服务 nssm是一个可以把bat批处理文件部署为Windows服务的小工具.例如很多.net项目可能还是在Windows服务器上面跑的,但是很多组件只提供 ...

  5. 五. jenkins部署springboot项目(2)--windows环境--服务

    前提:jenkins和springboot运行在同一台机器 springboot 通过winsw部署为服务 winsw 下载地址:https://github.com/kohsuke/winsw/re ...

  6. 将Java应用注册为后台服务

    项目中有一个java应用程序,交付后用户要求要把这个程序做成后台服务程序,即:系统启动后该程序可以自动启动,并且在前台不要出现运行窗口,维护人员只要在“服务管理”(Windows)中选择启动或停止即可 ...

  7. Python 实现windows后台服务

    # -*- coding: utf-8 -*- import sys import win32api import win32con import win32event import win32ser ...

  8. 如何注册java程序为windows服务

    如何注册java 程序为windows 服务 最近想找个软件来控制电脑的关机时间,在网上找了几个,都是可视化界面的可以设置具体的关机时间的软件.由于我想编写的关机程序是运行在别人机器上,只能让该机器在 ...

  9. Linux环境下执行java -jar xxx.jar命令如何让springboot项目在后台运行

    段落引用> 由于springboot内置了tomcat容器,我们通常会把项目打成jar或者war后直接使用java -jar xxx.jar命令去运行程序,但是当前ssh窗口被锁定或者按下ctr ...

随机推荐

  1. 攻城狮在路上(壹) Hibernate(三)--- 属性访问、命名策略、派生属性、指定包名等

    一.hibernate访问持久化类属性的策略: 在<property>元素中的access属性用于指定Hibernate访问持久化类属性的方式. 常见的方式如下: 1.property:默 ...

  2. 7-13IN和NOT IN 子查询

    IN后面的子查询可以返回多条记录. SELECT ...FROM  WHERE 查询表达式 IN(子查询) 常用IN替换等于(=)的比较子查询. 用法: (1)使用 :IN关键字可以使父查询匹配子查询 ...

  3. WCF学习笔记之消息交换模式

    在WCF通信中,有三种消息交换模式,OneWay(单向模式), Request/Reponse(请求回复模式), Duplex(双工通信模式)这三种通信方式.下面对这三种消息交换模式进行讲解. 1. ...

  4. WPF中使用ReportViewer报表

    本篇博客将介绍如何在WPF中使用ReportViewer控件. 1. 环境准备:下载安装最新版ReportViewer(PS:需要安装Microsoft SQL Server System CLR T ...

  5. hdu 5833 Zhu and 772002 高斯消元

    Zhu and 772002 Problem Description Zhu and 772002 are both good at math. One day, Zhu wants to test ...

  6. HDU 5145 NPY and girls 莫队+逆元

    NPY and girls Problem Description NPY's girlfriend blew him out!His honey doesn't love him any more! ...

  7. 解决ScrollView嵌到listView冲突问题

    方法一: 把下面的方法放在绑定适配器操作的下面就行. /** * 重新计算ListView的高度,解决ScrollView和ListView两个View都有滚动的效果,在嵌套使用时起冲突的问题 * @ ...

  8. java gui 之容器组件

    演示Frame和Panel package unit7; import java.awt.*; public class SimpleFrame { public static void main(S ...

  9. 70多G的Kindle电子书合集

    70多个G的电子书. 百度网盘分享了几次被屏蔽了, 360网盘每个文件夹最多只能分享2000个文件,所以只能分成多个文件夹分享. 如果大家知道更好的分享方式,欢迎留言相告,多谢: http://yun ...

  10. JavaScript入门(2)

    encodeURI()和 decodeURI()作用  编码与解码 encodeURIComponent()和 decodeURIComponent()作用区别是  后者可以处理一些特殊字符进行转义 ...