WEB开发网
开发学院软件开发Java 将Java程序注册成系统服务 阅读

将Java程序注册成系统服务

 2009-09-23 00:00:00 来源:WEB开发网   
核心提示: wrapper.disable_shutdown_hook=TRUE:是否禁用 "关闭Hook" ,关闭的话在出现一般异常的情况下面可以忽略掉异常继续执行wrapper.console.loglevel=INFO:配置控制台的显示信息的级别,NONE不显示任何输出信息,将Ja

wrapper.disable_shutdown_hook=TRUE:是否禁用 "关闭Hook" ,关闭的话在出现一般异常的情况下面可以忽略掉异常继续执行

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(手动)两种方式。默认为自动。

前几天在看Jetty源代码的时候发现它也是使用Wrapper注册成系统服务,使用的是第三种方式,可以参考一下,

import java.io.PrintStream;
import org.mortbay.jetty.Server;
import org.mortbay.start.Main;
import org.tanukisoftware.wrapper.WrapperListener;
import org.tanukisoftware.wrapper.WrapperManager;
public class JettyServiceWrapperListener implements WrapperListener {
  private static Server __server = null;
  public void controlEvent(int event) {
    if ((WrapperManager.isControlledByNativeWrapper()) || ((event != 200) && (event != 201) && (event != 203)))
      return;
    WrapperManager.stop(0);
  }
  public Integer start(String[] args) {
    for (int i = 0; i < args.length; ++i) {
      System.out.println("ARG[" + i + "] = " + args[i]);
    }
    Main.main(args);
    return null;
  }
  public int stop(int code) {
    try {
      System.out.println("JettyServiceWrapperListener: Stopping Jetty 6 Service!!!");
      __server.stop();
      System.out.println("JettyServiceWrapperListener: Jetty 6 Service Stopped!!!");
      return code;
    }
    catch (Exception e) {
      System.out.println("Stop Server Error");
      e.printStackTrace();
    }
    return -1;
  }
  public static void setServer(Server server) {
    __server = server;
  }
  public static Server getServer() {
    return __server;
  }
  public static void main(String[] args) {
    String[] newStrArgs = new String[args.length + 1];
    newStrArgs[0] = System.getProperty("jetty.home") + "etc/jetty-win32-service.xml";
    for (int i = 0; i < args.length; ++i) {
      newStrArgs[(i + 1)] = args[i];
    }
    WrapperManager.start(new JettyServiceWrapperListener(), newStrArgs);
  }
}

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

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

上一页  1 2 3 

Tags:Java 程序 注册

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接