A-A+

使用JavaService创建Windows服务-创建Windows服务

2016年06月06日 技术, 默认 暂无评论 阅读 3,073 次

目录索引:

使用JavaService创建Windows服务-IDEA下创建Jar包

使用JavaService创建Windows服务-创建Windows服务

在上一张创建完毕了可执行的Jar包后,接下来就是将其作为Windows服务运行起来,我们上一篇中创建的Jar包所在文件夹结构为:

jar5

其中lib和dataextract.jar是我们的Java程序,JavaService.exe就是我们用来将Java程序安装成Windows服务的辅助工具。JavaService.exe可以去http://forge.ow2.org/projects/javaservice/下载,如下图所示:

jar6

千万要注意操作系统的不同,32位需要使用JavaService-2.0.10.zip,而64位系统需要使用JavaService-2.0.10-amd64.zip,如果使用的不正确,虽然可以安装成Windows服务,但是会报错(找不到Win32程序入口)。

以上工作完成后,使用管理员身份打开Cmd命令行窗口,将路径转到Jar包所在的文件夹,运行命令:

  1. JavaService.exe -install DATA_EXTRACT "%JAVA_HOME%"/jre/bin/server/jvm.dll -Xmx256m -Djava.class.path="%JAVA_HOME%"/lib/tools.jar;C:/dataextract/out/dataextract.jar -start com.dataextract.app.Run -method StartService -stop comdataextract.app.Run -method StopService -auto

其中,DATA_EXTRACT为Windows服务名称;使用%JAVA_HOME%是为了避免路径中存在空格;需要确保系统环境变量中有%JAVA_HOME%存在;C:/dataextract/out/为Jar包所在的文件夹路径;com.dataextract.app是我们的入口程序所在的包名;StartServic为启动函数;StopService为停止函数;-auto为Windows服务使用自启动方式。

com.dataextract.app.Run这个类的代码如下:

  1. public class Run {
  2.     private static Thread thread=null;
  3.     private static Service service = null;
  4.     /**
  5.      * 退出服务方法(该方法必须有参数 String [] args)
  6.      * @param args
  7.      */
  8.     public static void StopService(String[] args)
  9.     {
  10.         service.setRunFlag(false);
  11.     }
  12.     /**
  13.      * 启动服务方法(该方法必须有参数 String [] args)
  14.      * @param args
  15.      */
  16.     public static void StartService(String[] args)
  17.     {
  18.         // 产生服务线程
  19.         service = new Service();
  20.         thread=new Thread(service);
  21.         try
  22.         {
  23.             // 将服务线程设定为用户线程,以避免StartService方法结束后线程退出
  24.             thread.setDaemon(false);
  25.             if(!thread.isDaemon()) {
  26.                 log.info("用户线程已成功设定");
  27.             }
  28.             //启动服务线程
  29.             thread.start();
  30.         }
  31.         catch(Exception e)
  32.         {
  33.         }
  34.     }
  35. }
  36. class Service implements Runnable{
  37.     private boolean runFlag = true;
  38.     /**
  39.      * 设定服务线程运行标志值
  40.      */
  41.     public synchronized void setRunFlag(boolean runFlag) {
  42.         this.runFlag = runFlag;
  43.     }
  44.     /**
  45.      * 取得服务线程运行标志值
  46.      */
  47.     private synchronized boolean getRunFlag() {
  48.         return runFlag;
  49.     }
  50.     public void run() {
  51.         log.info("服务启动于" + DateUtil.now());
  52.         while(getRunFlag()) {
  53.             try{
  54.                 //运行代码
  55.                 Thread.sleep(100000*10);
  56.             }
  57.             catch (Exception e) {
  58.                 log.error(e);
  59.             }
  60.         }
  61.         log.info("服务停止于" + DateUtil.now());
  62.     }
  63. }

给我留言

Copyright © 字痕随行 保留所有权利.   Theme  Ality 京ICP备14039894号

用户登录

分享到: