在Windows系统中使用Tomcat的用户,一定遇到过把Tomcat安装成系统服务的问题。
我们今天来梳理下Tomcat官方为我们提供的方式。
方式一:
我们可以直接下载Windows的安装版,exe文件,在安装的时候会安装Windows服务。
方式二:
下载对应CPU结构的解压版,此时下载到的文件bin目录下,会包含这样的三个文件,我们以Tomcat6为例:
与一般的解压版相比,多了上面红框中的三个文件。
安装服务时,只需要在命令行中执行如下命令:
service.bat install
之后,在服务Windows的服务列表中,就会增加Apache Tomcat 6的服务项,可以和其他服务一样,进行启动停止等操作。
方式三:
如果你已经在一些脚本中进行了特定配置,此时想要以服务方式安装,可以找一个包含方式二中三个文件的Tomcat,把这三个文件拷贝过来,执行上述的安装命令,也可以完成任务方式的安装。
方式四:
自己通过C++/C#来自行实现服务方式的注册与解注册。
本质上方式二和三是一样的,我们从这三个文件来分析Tomcat服务安装实现原理。
首先来看service.bat中几处主要的内容:
executable:
install命令参数:
我们注意到,在executable中,是执行tomcat6.exe,这个应用程序,实质上是一个Wrapper。
Windows服务需要通过服务管理器以信号或消息的方式与服务进行通信,这种机制,在Windows JVM中并没有特定的实现,所以对于JVM来说并不擅长以Windows服务方式运行。
所以,要实现JAVA应用以Windows服务方式运行,一种常用的方式是以Wrapper的形式,使得服务管理器中的消息可以传递到JVM,从而使应用进行相应的动作。
Apache 的 procrun 项目就是这样一个提供Wrapper的项目。项目可以到这里了解:http://commons.apache.org/daemon/procrun.html.
其中,tomcat6.exe就是procrun项目中的prunsrv,我们安装完的服务,实际上都是在操作这个exe,这个可以查看服务的属性来了解:
我们看到,可执行文件的路径是执行了tomcat6.exe。同时,在应用程序后面,还传入了一个参数。
这个参数是什么意思呢?我们来看下面的说明:
其中,RS就代表通过服务管理器来启动。命令中还包含一个特殊的是MS,即Monitor Start,启动后应用最小化到系统托盘(Tray)。
说了半天都是tomcat6.exe,那tomcat6w.exe是啥呢?
我们双击执行,可以看到这个的画面
这里就是我们在service.bat中指定那一系列参数,即对应的Tomcat的配置信息,传统的我们在catalina.bat中指定了,而服务方式启动,就需要在这里指定。
所以,方式三可以安装成功,是因为这两个exe文件,确实只是一个壳,把相关的信息做成了Wrapper。
以上,即为Tomcat注册为Windows服务的几种方式,以及官方实现的原理。