将Java程序注册成系统服务

上传人:橙** 文档编号:333364386 上传时间:2022-09-01 格式:PDF 页数:5 大小:122.85KB
返回 下载 相关 举报
将Java程序注册成系统服务_第1页
第1页 / 共5页
将Java程序注册成系统服务_第2页
第2页 / 共5页
将Java程序注册成系统服务_第3页
第3页 / 共5页
将Java程序注册成系统服务_第4页
第4页 / 共5页
将Java程序注册成系统服务_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《将Java程序注册成系统服务》由会员分享,可在线阅读,更多相关《将Java程序注册成系统服务(5页珍藏版)》请在金锄头文库上搜索。

1、你是不是在找将Java 程序注册成系统服务的方法?试试Java Service Wrapper这个工具吧,你可以从这个网站上面下载你喜欢的版本:http:/wrapper.tanukisoftware.org/,Java Service Wrapper提供了适合市面上流行的操作系统的版本。使用 Wrapper将 Java 程序注册成系统服务有三种方式可供选择:第一种是使用WrapperSimpleApp 这个帮助类来运行你的程序,这个是最简单的方法,也是官方推荐使用的方式,但是这样可能会对你的程序有改动,如果你在项目初期就开始考虑的话,这个方法还是不错的。像JBoss 也是使用这种方式。第二种

2、方式是使用WraperStartStopApp这个类来实现功能,这个方法适合那些通过ClassA 类来负责启动服务,ClassB 类来负责停止服务的应用场景。我使用的是第三种方式,这种方式好处是对程序改动比较小,只要让你的启动类实现WrapperListener接口,并实现接口中的start(String args)和 stop(String args)方法,然后通过WrapperManager来启动。其他的一些配置比如要运行的主类全名、Java类 路 径、依 赖Java库 的 路 径、还 有 服 务 显 示 的 名 称,都 可 以 通 过 配 置 文 件conf/wrapper.conf来配

3、置,相对来说比较灵活,像我目前在做的RCP 项目有自动更新功能,更新下来的插件要比那些原来的插件的版本号要更新,虽然说会定期删除那些过期的插件,但有时还是会产生延迟,那么配置文件里面配置的Java 类路径必须也要链接到最新的插件的地址,我是通过一个Java 类来管理这个wrapper.confg文件,如果有更新的插件,通过 Java 类来得到最新插件的路径,将这些信息写入到wrapper.confg文件中,这样就能保证配置文件中的类路径是最新的了。下面是程序的结构:名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 5 页 -这里主页介绍一下wrapper.conf的配置,这个配置文

4、件是Java 常用的属性文件格式,mand=java:指定要运行的Java,如果你不想设置环境变量的话,你也可以指定JDK 的 bin 文件路径wrapper.java.mainclass=test.Main:指 定 要 运 行 的 类,这 个 类 必 须 实 现WrapperListener接口和接口中的start和 stop方法,通过WrapperManager类来初始化服务。如果启动服务过程中出现与不能取得JVM 信息的情况,可能是接口实现的问题。wrapper.java.classpath.1=./lib/wrapper.jar:配 置Java的 类 路 径,这 里 的 将wrappe

5、r.jar也包含在内,这里可以设置参数的位置,而且这个位置必须得从1 开始,不能跳过,必须顺序指定,指定类路径的时候还有根据依赖关系来排列,被依赖的排在前面,否则会出现ClassNotFoundException的错误,这里支持觉得路径和相对路径,也支持通配符*,比如 wrapper.java.classpath.1=./lib/wrapper*,不过这个通配符只能用于匹配文件名,不能用于匹配文件夹名称。wrapper.java.library.path.1=./lib:指定 Wrapper自带的类库文件存放文件夹,比如Wrapper.DLL文件等,只要指定到对应的上级目录名称就行,支持通配符

6、。wrapper.java.library.path.1=./lib:指定 Wrapper自带的类库文件存放文件夹,比如Wrapper.DLL文件等,只要指定到对应的上级目录名称就行,支持通配符。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 5 页 -wrapper.app.parameter.1=:指定运行类的main方法参数。wrapper.daemonize=TRUE:将服务注册成守护线程,就算程序关闭的话不影响服务的运行wrapper.ntservice.hide-console=false:不显示控制台wrapper.filter.trigger.1=,wrapper

7、.filter.action.1:指定过滤器和触发器,可以对控制台的输出信息进行监听,然后触发相应的操作wrapper.disable_shutdown_hook=TRUE:是否禁用 关闭 Hook,关闭的话在出现一般异常的情况下面可以忽略掉异常继续执行wrapper.console.loglevel=INFO:配置控制台的显示信息的级别,NONE不显示任何输出信息,FATAL 只显示致命的错误消息,ERROR 显示所有的错误消息,STATUS 显示服务状态的改变,包括服务启动和停止等信息,INFO显示所有程序输出的信息和JVM 显示的信息,如果程序无法正常启动,可以使用DEBUG 显示详细的

8、调试信息。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:系

9、统服务的名称,wrapper.ntservice.displayname=Wrapper Demo:在服务管理中显示的名称wrapper.ntservice.description=Wrapper Demo的介绍信息:在服务管理器显示服务的描述信息wrapper.ntservice.starttype=AUTO_START:配 置 服 务 启 动 方 式,可 以 选 择AUTO_START(自动)和 DEMAND_START(手动)两种方式。默认为自动。前几天在看Jetty源代码的时候发现它也是使用Wrapper注册成系统服务,使用的是第三种方式,可以参考一下,名师资料总结-精品资料欢迎下载-

10、名师精心整理-第 3 页,共 5 页 -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 _s

11、erver=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+=+argsi);Main.main(args);return null;public int sto

12、p(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 setServ

13、er(Server server)_server=server;名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 5 页 -public static Server getServer()return _server;public static void main(String args)String newStrArgs=new Stringargs.length+1;newStrArgs0=System.getProperty(jetty.home)+etc/jetty-win32-service.xml;for(int i=0;i args.length;+i)newStrA

14、rgs(i+1)=argsi;WrapperManager.start(new JettyServiceWrapperListener(),newStrArgs);这个类实现了Wrapper的 WrapperListener 并实现了它的start和 stop方法,start方法在服务器启动的时候调用,不过这里要注意,如果在 30 秒内你不能执行完start方法,系统会自动放弃这个服务的启动,解决办法可以在start方法使用线程,将比较耗时的操作放在这个线程执行,比如加载Spring文件等。而且如果在start方法执行出现异常,会终止服务的运行。这点要注意。Stop方法在服务停止启动,start和 stop方法的参数可以在wrapper.conf文件里面配置。一般按照这样配置的话你的程序应该可以通过执行StartApp-NT.bat正常启动了名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 5 页 -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号