之前写过一篇博客关于如何将java项目封装成windows服务,名字叫《java项目加入windows服务》。最近在用这个功能的框架封装java项目的时候又遇到了一些问题,所以又重新翻阅了一下java service wrapper的帮助文档,又对这个框架有了一点新的认识,所以就再来写这样一篇博客来记录一下通过java service wrapper框架将java项目封装成服务的两种方式。
在介绍之前首先说一下用这个框架的场景,如果用户用过TOMCAT或者JBOSS应用服务器的话,那么服务启动之后的黑色框框是肯定不陌生的,那么作为一个应用服务器在桌面上打开的黑色框框会很容易被用户不小心关闭,进而带来不必要的麻烦,所以将黑色框框设置到系统服务中就能够避免上面的那个问题。
那么,就可以选择java service wrapper这个开源框架进行封装。
快速入手参见博客《java项目加入windows服务》,快速入手之后对java service wrapper有个初步认识再来看下面的内容是非常好的。
这篇博客简单介绍一下将java项目封装成服务的最常见的两种方式(一共有四种,不常见的可以去官方网站上了解一下),
第一种为使用WrapperSimpleApp进行集成,这种方式的实现在《java项目加入windows服务》博客中已经阐述了。这种方式简单,而是java service wrapper极度推荐的一种方式。这种方式当wrapper停止的时候jvm中的线程不会清除,当然在wrapper通过system.exit(int)来推出jvm。但是如果应用程序有自己的钩子函数来做清除的话,当wrapper停止的时候会给应用程序一个机会去清除jvm的线程占用的资源,之后再退出jvm,如果没有钩子的话就相当于windows中的ctrl+c操作。
第二种为使用WrapperStartStopApp进行集成,这种方式适特别用于启动时会开启一个服务端socket等待连接,而关闭时则通过连接触发应用的停止,就像TOMCAT这些应用服务器启动和关闭的时候就适合这种集成方式。这种方式和上面的方式不同之处是在wrapper退出jvm的时候会清除操作。
具体关键配置在于:
再详细的配置方式可以见wrapper官方网站。
知道这两种集成方式之后,就不会再出现用户不小心将应用服务器关闭的情况了。另外如果想深入使用wrapper,一定要对他的conf文件的配置项相当熟悉。有兴趣的可以动手玩一下了。