`
vwpolo
  • 浏览: 193777 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用Java Service Wrapper 将Java程序注册成系统服务

阅读更多

     你是不是在找将Java程序注册成系统服务的方法?试试Java Service Wrapper这个工具吧,你可以从这个网站上面下载你喜欢的版本:http://wrapper.tanukisoftware.org/ ,Java Service Wrapper提供了适合市面上流行的操作系统的版本。

    使用WrapperJava程序注册成系统服务有三种方式可供选择:

    第一种是使用WrapperSimpleApp 这个帮助类来运行你的程序,这个是最简单的方法,也是官方推荐使用的方式,但是这样可能会对你的程序有改动,如果你在项目初期就开始考虑的话,这个方法还是不错的。像JBoss也是使用这种方式。

    第二种方式是使用WraperStartStopApp这个类来实现功能,这个方法适合那些通过ClassA类来负责启动服务,ClassB类来负责停止服务的应用场景。

    我使用的是第三种方式,这种方式好处是对程序改动比较小,只要让你的启动类实现WrapperListener接口,并实现接口中的start(String[] args) 和 stop(String [] args)方法,然后通过WrapperManager来启动。其他的一些配置比如要运行的主类全名、Java类路径、依赖Java库的路径、还有服务显示的名称,都可以通过配置文件conf/wrapper.conf来配置,相对来说比较灵活,像我目前在做的RCP项目有自动更新功能,更新下来的插件要比那些原来的插件的版本号要更新,虽然说会定期删除那些过期的插件,但有时还是会产生延迟,那么配置文件里面配置的Java类路径必须也要链接到最新的插件的地址,我是通过一个Java类来管理这个wrapper.confg文件,如果有更新的插件,通过Java类来得到最新插件的路径,将这些信息写入到wrapper.confg文件中,这样就能保证配置文件中的类路径是最新的了。
   下面是程序的结构:

http://www.blogjava.net/images/blogjava_net/vwpolo/JavaServiceWrapper/treeWrapper.jpg

 

    这里主页介绍一下wrapper.conf的配置,这个配置文件是Java常用的属性文件格式,

   wrapper.java.command=java: 指定要运行的Java,如果你不想设置环境变量的话,你也可以指定JDKbin文件路径

   wrapper.java.mainclass=test.Main: 指定要运行的类,这个类必须实现WrapperListener接口和接口中的startstop方法,通过WrapperManager类来初始化服务。如果启动服务过程中出现与不能取得JVM信息的情况,可能是接口实现的问题。

   wrapper.java.classpath.1=../lib/wrapper.jar:配置Java的类路径,这里的将wrapper.jar也包含在内,这里可以设置参数的位置,而且这个位置必须得从开始,不能跳过,必须顺序指定,指定类路径的时候还有根据依赖关系来排列,被依赖的排在前面,否则会出现ClassNotFoundException的错误,这里支持觉得路径和相对路径,也支持通配符"*",比如wrapper.java.classpath.1=../lib/wrapper*,不过这个通配符只能用于匹配文件名,不能用于匹配文件夹名称。

   wrapper.java.library.path.1=../lib指定Wrapper自带的类库文件存放文件夹,比如Wrapper.DLL文件等,只要指定到对应的上级目录名称就行,支持通配符。

   wrapper.java.library.path.1=../lib指定Wrapper自带的类库文件存放文件夹,比如Wrapper.DLL文件等,只要指定到对应的上级目录名称就行,支持通配符。

   wrapper.app.parameter.1= :指定运行类的main方法参数。

   wrapper.console.loglevel=INFO配置控制台的显示信息的级别,NONE不显示任何输出信息,FATAL只显示致命的错误消息,ERROR显示所有的错误消息,STATUS显示服务状态的改变,包括服务启动和停止等信息,INFO显示所有程序输出的信息和JVM显示的信息,如果程序无法正常启动,可以使用DEBUG显示详细的调试信息。

   wrapper.logfile.loglevel=INFO配置日志记录文件要记录的输出信息的级别,参数值和wrapper.console.loglevel功能一致

   wrapper.logfile.maxsize=0配置日志文件的最大大小,如果为0表示不限制日志文件的大小,支持标记符,“k”代表KB,“m”代表MB,如果要设置最大大小为100KB的话可以这样:wrapper.logfile.maxsize=100k

   wrapper.console.title=Wrapper Demo 控制台窗口显示标题,

   wrapper.ntservice.name=testwrapper: 系统服务的名称

   wrapper.ntservice.displayname=Wrapper Demo在服务管理中显示的名称

   wrapper.ntservice.description=Wrapper Demo的介绍信息: 在服务管理器显示服务的描述信息

   wrapper.ntservice.starttype=AUTO_START: 配置服务启动方式,可以选择AUTO_START(自动)DEMAND_START(手动)两种方式。默认为自动。


   下面是Wrapper自带的例子源代码,可以参考一下,

 

 1 package org.tanukisoftware.wrapper.test;
 2 
 3 import java.awt.List;
 4 import java.awt.TextField;
 5 import java.io.IOException;
 6 import java.io.PrintStream;
 7 import org.tanukisoftware.wrapper.WrapperActionServer;
 8 import org.tanukisoftware.wrapper.WrapperListener;
 9 import org.tanukisoftware.wrapper.WrapperManager;
10 
11 public class Main extends AbstractActionApp implements WrapperListener {
12   private MainFrame m_frame;
13   private DeadlockPrintStream m_out;
14   private DeadlockPrintStream m_err;
15   private Thread m_userRunner;
16   private List m_listenerFlags;
17   private TextField m_serviceName;
18 
19   public Integer start(String[] args) {
20     System.out.println("start()");
21 
22     prepareSystemOutErr();
23     try {
24       this.m_frame = new MainFrame(this);
25       this.m_frame.setVisible(true);
26     } catch (InternalError e) {
27       System.out.println();
28       System.out.println("ERROR - Unable to display the Swing GUI:");
29       System.out.println("          " + e.toString());
30       System.out.println("Exiting");
31       System.out.println();
32       return new Integer(1);
33     }
34 
35     try {
36       int port = 9999;
37       WrapperActionServer server = new WrapperActionServer(port);
38       server.enableShutdownAction(true);
39       server.enableHaltExpectedAction(true);
40       server.enableRestartAction(true);
41       server.enableThreadDumpAction(true);
42       server.enableHaltUnexpectedAction(true);
43       server.enableAccessViolationAction(true);
44       server.enableAppearHungAction(true);
45       server.start();
46 
47       System.out.println("ActionServer Enabled. ");
48       System.out.println("  Telnet localhost 9999");
49       System.out.println("  Commands: ");
50       System.out.println("    S: Shutdown");
51       System.out.println("    H: Expected Halt");
52       System.out.println("    R: Restart");
53       System.out.println("    D: Thread Dump");
54       System.out.println("    U: Unexpected Halt (Simulate crash)");
55       System.out.println("    V: Access Violation (Actual crash)");
56       System.out.println("    G: Make the JVM appear to be hung.");
57     } catch (IOException e) {
58       System.out.println("Unable to open the action server socket: " + e.getMessage());
59     }
60     return null;
61   }
62 
63   public int stop(int exitCode) {
64     System.out.println("stop(" + exitCode + ")");
65 
66     if (this.m_frame != null) {
67       if (!(WrapperManager.hasShutdownHookBeenTriggered())) {
68         this.m_frame.setVisible(false);
69         this.m_frame.dispose();
70       }
71       this.m_frame = null;
72     }
73 
74     if (isNestedExit()) {
75       System.out.println("calling System.exit(" + exitCode + ") within stop.");
76       System.exit(exitCode);
77     }
78     return exitCode;
79   }
80 
81   public void controlEvent(int event) {
82     System.out.println("controlEvent(" + event + ")");
83 
84     if ((event == 202&& (WrapperManager.isLaunchedAsService()))  {
85       System.out.println("  Ignoring logoff event");
86     } else{
87       WrapperManager.stop(0);
88     }
89   }
90 
91   public static void main(String[] args) {
92     System.out.println("Initializing");
93 
94     WrapperManager.start(new Main(), args);
95   }
96 }

 

   这个类实现了WrapperWrapperListener 并实现了它的startstop方法,start方法在服务器启动的时候调用,不过这里要注意,如果在30秒内你不能执行完start方法,系统会自动放弃这个服务的启动,解决办法可以在start方法使用线程,将比较耗时的操作放在这个线程执行,比如加载Spring文件等。而且如果在start方法执行出现异常,会终止服务的运行。这点要注意。

  Stop方法在服务停止启动,startstop方法的参数可以在wrapper.conf文件里面配置。一般按照这样配置的话你的程序应该可以通过执行StartApp-NT.bat正常启动了,

<!--endfragment-->

3
0
分享到:
评论
2 楼 vwpolo 2009-12-18  
构建路径存在问题,没有找到wrapper包的bin目录下面的wrapper.exe这个文件
1 楼 wanii3344 2009-12-17  
楼主您好:
看这个异常
Missing or invalid location in wrapper.java.library.path.1. Wrapper executable cannot be found

在linux上用的时候,说Wrapper可执行文件没有找到。是怎么回事。

相关推荐

    Java Service Wrapper使用总结

    WrapperSimpleApp 是 Java Service Wrapper 提供的一个简单的示例应用程序,用于演示如何使用 Java Service Wrapper 将 Java 应用程序发布为可安装的服务。 ams-collector-verify 目录结构 ams-collector-verify ...

    SpringBoot 使用Java Service Wrapper 部署Windows服务

    而Java Service Wrapper(通常简称为Wrapper)是一个工具,它允许将Java应用程序作为操作系统服务来运行,尤其是在Windows环境下。在本文中,我们将深入探讨如何使用Java Service Wrapper将SpringBoot应用部署为...

    Java Service Wrapper 将你的java应用程序安装成windows系统服务

    Java Service Wrapper是一个强大的工具,它允许开发者将Java应用程序轻松地包装为Windows系统服务,以便在操作系统启动时自动启动Java程序,并能实现与系统服务相同的管理功能,如自动重启、日志记录等。这个工具...

    Java Service Wrapper配置Java台程序Windows服务

    对以上配置的服务进行测试,运行InstallMyApp-NT.bat将把你的应用(此处为App)安装到Win32系统服务中了。 打开控制面板-管理程序-服务,看到App已经在系统服务中了,其他用法就与我们熟悉的Windows服务一样了。 ...

    Java Service Wrapper,Window,32位免费社区版

    1. **服务注册与管理**:它能够将Java应用程序注册为Windows服务,使得应用程序可以在系统启动时自动运行,并且可以像其他系统服务一样进行管理,如启动、停止、暂停和恢复。 2. **故障恢复**:如果Java应用程序...

    用Java Service Wrapper将java程序制作成系统服务进程

    Java Service Wrapper是一个强大的工具,它允许开发者将Java应用程序打包成Windows或其他操作系统下的系统服务。这样,Java程序可以在系统启动时自动运行,即使没有用户登录也能持续运行,且提供了管理和控制服务的...

    Java Service Wrapper工具把Java程序转换为Windows服务

    Java Service Wrapper工具是一款用于将Java应用程序转换为操作系统服务的实用工具,特别适用于Windows环境。它使得Java程序能够像系统服务一样启动、停止,并且在系统启动时自动运行,提供了更稳定的运行环境和管理...

    Java Service Wrapper部署说明

    Java Service Wrapper是一个开源工具,它允许开发者将Java应用程序部署为操作系统级别的服务,确保JVM的稳定运行,尤其在没有GUI的环境下。它适用于多种操作系统,包括Windows和Linux。本部署说明将详细介绍如何使用...

    YSJSW(Yet Another Java Service Wrapper)

    1. **服务注册与管理**:YSJSW可以将任何Java应用程序注册为Windows服务,允许通过“服务”管理控制台进行操作,如启动、停止、暂停和恢复服务。此外,它还支持设置服务的启动优先级和依赖关系。 2. **自动启动与...

    java service wrapper

    Java Service Wrapper是一个强大的工具,主要用于将Java应用程序包装成操作系统级别的服务,使得Java程序可以在Windows、Linux等系统下作为后台服务持续运行,不受用户登录或注销的影响。它提供了启动、停止、管理和...

    Java Service Wrapper64位破解

    去CSDN下载所谓破解出现以下错误:wrapper | Licensed to (null) for (null) wrapper | wrapper | Launching a JVM... jvm 1 | WrapperManager: Initializing... jvm 1 | WrapperJNI Error: Not licensed to use ...

    Maven利用Java service wrapper生成Windows服务

    在项目的开发中,有时候需要将Java应用程序打包成Windows服务,我们就直接可以通过windows的服务来启动和关闭java程序了。 本博文将通过有两种方法实现该功能,手动创建法和Maven自动打包法。

    Java Service Wrapper使用说明

    Java Service Wrapper是一款强大的工具,它能将任何标准的Java应用程序转换为Windows服务或Unix守护进程,极大地提升了Java应用程序在企业级环境中的可用性和稳定性。本文将详细解析Java Service Wrapper的使用步骤...

    JavaServiceWrapper将Tomcat写成系统服务

    7. 完成配置后,运行`InstallService.bat`,Wrapper会将Tomcat注册为Windows服务,并根据`wrapper.conf`的设置启动。你可以通过服务管理工具查看和控制这个新的服务。 8. 如果需要卸载服务,只需运行`...

    JavaServerWrapper做成服务

    "将Java程序注册成系统服务.docx"会指导你如何使用Wrapper工具将你的Java应用程序注册为系统服务。这个过程可能包括运行特定的命令行工具,如`installService`或`removeService`,来完成服务的安装和卸载。 总的来...

    Java Service Wrapper 3.5.25 标准版破解

    Java Service Wrapper 3.5.25 标准版破解,Windows 64位

    Java Service Wrapper x86-32-3.5.9

    Java Service Wrapper是一款强大的工具,专为在Windows操作系统上运行Java应用程序设计,将其转换为系统服务。这个工具的主要目的是使得Java程序能够像其他Windows服务一样启动、管理和监控,即便是在系统启动时也能...

    使用Wrapper将Java程序注册为Windows的服务

    本文将详细介绍如何使用Java Service Wrapper(简称Wrapper)工具将Java程序注册为Windows的服务。 #### 二、准备工作 1. **运行环境**:确保计算机已安装Java运行环境(JRE或JDK),推荐使用较新版本的JDK。 2. ...

Global site tag (gtag.js) - Google Analytics