使用Apache Commons Daemon将jar文件部署为Windows服务(部分转载)
2018-01-08 14:42
615 查看
首先,先说明我的目的。我为了将公司研究院开发的业务流程引擎组件(基于eBPM,负责执行遵循BPMN2.0规范的XML流程模板。同时提供与流程操作相关的各个接口。例如查询流程定义,发布流程,删除流程,创建流程实例,查询待办已办等)部署为Windows服务,使其能够像其他Windows服务一样开机自启。这样我们就可以把业务流程引擎组件作为服务安装到服务器上,随着服务器的启动而启动,无需在手动执行启动脚本。
参考出处:http://blog.csdn.net/masson32/article/details/51830656
目前我了解的将Java程序部署为Windows服务的方式有java service wrapper和Apache Commons Daemon两种。
1.概述
1.1 为什么使用Apache Commons Daemon
java service wrapper使用简单,集成方法简单,不修改任何代码,一般情况下已满足需求。但是,java service wrapper只对java程序的开启及关闭进行操作,若需要对程序启动前及关闭前进行一些自定义的操作(如启动时初始化工作,关闭时释放某些资源或进行特殊操作),此时就可以使用apache commons daemon了。
1.2 Apache Commons Daemon介绍
Apache common deamon是用来提供java服务的安装,实现将一个普通的 Java 应用变成系统的一个后台服务,在linux下部署为后台运行程序,在windows部署为windows服务(著名的tomcat就是使用它实现启动及停止的。提供启动、停止、卸载等操作)。详细介绍可见commons-daemon官网。相对java
service wrapper,commons daemon需要自己写少许代码,即按规定要求编写程序启动及关闭的入口类,仅此而已。
2.过程
下载commons-daemon主程序
下载procrun,官网的procrun页面只对它的使用进行讲解,在哪里下载即没有提及,这里特别提醒一下,需要在这里下载procrun,下载
将你的Java程序打成jar包,commons-daemon-1.1.0.jar和prunsrv.exe,prunmgr.exe,install.bat,uninstall.bat放到同一个文件夹下(注意64位的机器要用amd64文件夹下的prunsrv.exe)
下面来写服务安装脚本 install.bat
要注意的是classpath中的路径应有你Java程序的所有依赖包以及你自己打包程序的那个jar包,上述解压出的commons-daemon-1.1.0.jar也应该在这个路径中。
%SRV% 为prunsrv.exe所在路径
%LOGPATH% 为日志路径,在服务部署号及启动时会出现如下日志:
commons-daemon,ebpm-stderr,ebpm-stdout为服务安装时产生的日志,trace为启动和停止服务时产生的日志。
--StartMethod 为程序入口开始方法(对应部署服务之后的启动) 必须要在自己打包的Java程序中写这个方法,根据自己的业务逻辑编写即可。(在某些博客中看到这个方法必须命名为start,实践证明并不需要,但你一定要有这个开始方法)。
--StopMethod 为程序入口结束方法(对应部署服务后的停止) 必须要在自己打包的Java程序中写这个方法,根据自己的业务逻辑编写即可。(在某些博客中看到这个方法必须命名为start,实践证明并不需要,但你一定要有这个结束方法)。
要格外注意的是以上两个方法一定要声明为public static void,并且一定要带参数(如string[] args),不然Apache Commons Daemon会报错,详情请见Apache Commons Daemon的官方说明文档。建议你所打包的Java入口程序中不写main方法,只写开始和结束方法。
再来写服务卸载脚本 uninstall.bat
简言之,到这一步为止,你的目录结构下应该有你自己打的jar包,commons-daemon-1.1.0.jar,prunsrv.exe,prunmgr.exe,install.bat,uninstall.bat
此时运行install.bat脚本即可,运行之后会发现服务中多了一个eBPM服务,可以正常的启动和停止。
服务安装成功后将prunmgr.exe重命名为eBPM.exe即为你的服务名即可显式的进行各种参数的配置,如下图
打出如下日志即为成功
以上就是我将公司开发的业务工作流引擎部署为Windows服务的全过程,公司自己的引擎代码就不提供了。
本人刚参加工作的小白一枚,请各路大神斧正!
参考出处:http://blog.csdn.net/masson32/article/details/51830656
目前我了解的将Java程序部署为Windows服务的方式有java service wrapper和Apache Commons Daemon两种。
1.概述
1.1 为什么使用Apache Commons Daemon
java service wrapper使用简单,集成方法简单,不修改任何代码,一般情况下已满足需求。但是,java service wrapper只对java程序的开启及关闭进行操作,若需要对程序启动前及关闭前进行一些自定义的操作(如启动时初始化工作,关闭时释放某些资源或进行特殊操作),此时就可以使用apache commons daemon了。
1.2 Apache Commons Daemon介绍
Apache common deamon是用来提供java服务的安装,实现将一个普通的 Java 应用变成系统的一个后台服务,在linux下部署为后台运行程序,在windows部署为windows服务(著名的tomcat就是使用它实现启动及停止的。提供启动、停止、卸载等操作)。详细介绍可见commons-daemon官网。相对java
service wrapper,commons daemon需要自己写少许代码,即按规定要求编写程序启动及关闭的入口类,仅此而已。
2.过程
下载commons-daemon主程序
commons-daemon-1.1.0-bin.zip,解压出commons-daemon-1.1.0.jar
下载procrun,官网的procrun页面只对它的使用进行讲解,在哪里下载即没有提及,这里特别提醒一下,需要在这里下载procrun,下载
commons-daemon-1.1.0-bin-windows.zip。解压出文件如下:
将你的Java程序打成jar包,commons-daemon-1.1.0.jar和prunsrv.exe,prunmgr.exe,install.bat,uninstall.bat放到同一个文件夹下(注意64位的机器要用amd64文件夹下的prunsrv.exe)
下面来写服务安装脚本 install.bat
@echo off rem 设置程序名称 set SERVICE_EN_NAME=eBPM set SERVICE_CH_NAME=业务工作流引擎 rem 设置java路径 set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_131 rem 设置程序依赖及程序入口类 set BASEDIR=%CD% set BPM_LIBS=%BASEDIR%\server\lib set BPM_3RD_LIBS=%BASEDIR%\server\3rd_lib set BPM_EXT_LIBS=%BASEDIR%\server\ext_lib set BPM_LOG=%BASEDIR%\config\log set CLASSPATH=%BPM_LIBS%\*;%BPM_3RD_LIBS%\*;%BPM_EXT_LIBS%\*;%BPM_LOG%;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%BPM_3RD_LIBS%\license-1.0.jar; rem 设置prunsrv路径 set SRV=%BASEDIR%\prunsrv.exe rem 设置日志路径及日志文件前缀 set LOGPATH=%BASEDIR%\server\work\logs rem 输出信息 echo SERVICE_NAME: %SERVICE_EN_NAME% echo JAVA_HOME: %JAVA_HOME% echo MAIN_CLASS: %MAIN_CLASS% echo prunsrv path: %SRV% rem 设置jvm if "%JVM%" == "" goto findJvm if exist "%JVM%" goto foundJvm :findJvm set "JVM=%JAVA_HOME%\jre\bin\server\jvm.dll" if exist "%JVM%" goto foundJvm echo can not find jvm.dll automatically, echo please use COMMAND to localation it echo for example : set "JVM=C:\Program Files\Java\jdk1.8.0_25\jre\bin\server\jvm.dll" echo then install service goto end :foundJvm rem 安装 "%SRV%" //IS//"%SERVICE_EN_NAME%" --DisplayName="%SERVICE_CH_NAME%" --Classpath="%CLASSPATH%" --Install="%SRV%" --JavaHome="%JAVA_HOME%" --Jvm 87cb ="%JVM%" --JvmMs=256 --JvmMx=1024 --Startup=auto --JvmOptions=-Djcifs.smb.client.dfs.disabled=false ++JvmOptions=-DBPM_HOME=%BASEDIR% ++JvmOptions=-Djcifs.resolveOrder=DNS --StartPath="%BASEDIR%" --StartMode=jvm --StartClass=com.cnpc.richfit.bpm.bootstrap.BPMStarter --StartMethod=doStartStandalone --StopPath="%BASEDIR%" --StopMode=jvm --StopClass=com.cnpc.richfit.bpm.bootstrap.BPMStarter --StopMethod=doStop --LogPath="%LOGPATH%" --StdOutput=auto --StdError=auto :end
要注意的是classpath中的路径应有你Java程序的所有依赖包以及你自己打包程序的那个jar包,上述解压出的commons-daemon-1.1.0.jar也应该在这个路径中。
%SRV% 为prunsrv.exe所在路径
%LOGPATH% 为日志路径,在服务部署号及启动时会出现如下日志:
commons-daemon,ebpm-stderr,ebpm-stdout为服务安装时产生的日志,trace为启动和停止服务时产生的日志。
--StartMethod 为程序入口开始方法(对应部署服务之后的启动) 必须要在自己打包的Java程序中写这个方法,根据自己的业务逻辑编写即可。(在某些博客中看到这个方法必须命名为start,实践证明并不需要,但你一定要有这个开始方法)。
--StopMethod 为程序入口结束方法(对应部署服务后的停止) 必须要在自己打包的Java程序中写这个方法,根据自己的业务逻辑编写即可。(在某些博客中看到这个方法必须命名为start,实践证明并不需要,但你一定要有这个结束方法)。
要格外注意的是以上两个方法一定要声明为public static void,并且一定要带参数(如string[] args),不然Apache Commons Daemon会报错,详情请见Apache Commons Daemon的官方说明文档。建议你所打包的Java入口程序中不写main方法,只写开始和结束方法。
再来写服务卸载脚本 uninstall.bat
@echo off set BASEDIR=%CD% set SERVICE_NAME=eBPM set "SRV=%BASEDIR%\prunsrv.exe" %SRV% //DS//%SERVICE_NAME% :end
简言之,到这一步为止,你的目录结构下应该有你自己打的jar包,commons-daemon-1.1.0.jar,prunsrv.exe,prunmgr.exe,install.bat,uninstall.bat
此时运行install.bat脚本即可,运行之后会发现服务中多了一个eBPM服务,可以正常的启动和停止。
服务安装成功后将prunmgr.exe重命名为eBPM.exe即为你的服务名即可显式的进行各种参数的配置,如下图
打出如下日志即为成功
以上就是我将公司开发的业务工作流引擎部署为Windows服务的全过程,公司自己的引擎代码就不提供了。
本人刚参加工作的小白一枚,请各路大神斧正!
相关文章推荐
- 转载:FastDFS的配置、部署与API使用解读(8)FastDFS多种文件上传接口详解
- 使用apache commons-fileupload.jar 实现文件上传
- 转载 使用ant.jar进行文件zip压缩
- 使用PyInstaller2将Python脚本转化为可执行文件(上-安装部分)(转载自博客园balian)
- 如何使用Cocoa来写XML文件和读XML文件[部分属于转载]
- 使用apache commons-fileupload.jar 实现文件上传
- 使用commons-daemon把jar文件做成服务
- 使用PyInstaller2将Python脚本转化为可执行文件(中-使用部分)(转载自博客园balian)
- 使用apache commons-fileupload.jar 实现文件上传
- 使用 DJ Java Decompiler 将整个jar包反编译成源文件(转载)
- 使用apache commons-fileupload.jar 实现文件上传
- 转载:FastDFS的配置、部署与API使用解读(3)以流的方式上传文件的客户端代码
- 使用apache commons-fileupload.jar 实现文件上传
- 使用DJ java Decomplier 将整个jar包反编译成源文件(转载)
- 使用apache commons-fileupload.jar 实现文件上传
- JAR 文件格式的强大功能(java中jar工具的使用)
- 使不能运行的JAR文件可以使用java -jar运行
- Ear、Jar、War文件之间有何不同?它们分别使用在哪种环境下?
- (转载+部分原创)FCK控件使用心得(新手大本营)
- 如何使用命令打jar文件