Java Service Wrapper将jar包安装成Windows服务
刚接触java,第一次使用Java开发windows服务,也是刚不久看了SSM框架
简直也是一头雾水,不过只要用心理解,其实很简单,下面有详细的步骤,包学包会
在windows上运行jar包,需要在工作目录下使用命令行运行jar包,这样会出现一个命令行窗口
而且这个命令行窗口有可能会不小心被关闭,且服务器启动后需要人为去点击开启
对于有些服务性的程序来说,我们需要将其部署为windows服务,在系统启动的时候自动启动
后来研究了两种方式:
1、使用 JavaService.exe 安装jar包
查了很多资料,最终这种方式也是可行的,可以成功将Jar包安装成WindowService
不过JavaService.exe的缺陷是不方便显视的配置参数,而且安装使用DOS命令
JavaService提供了8个参数可供选择,这里使用-install参数安装NT服务时还需要提供与服务相关的其它一些参数,其命令格式如下:
JavaService -install service_name jvm_library [jvm_options]
-start start_class [-method start_method] [-params (start_parameters)]
[-stop start_class [-method stop_method] [-params (stop_parameters)]]
[-out out_log_file] [-err err_log_file]
[-current current_dir]
[-path extra_path]
[-depends other_service]
[-auto | -manual]
[-shutdown seconds]
[-user user_name -password password]
[-append | -overwrite]
[-startup seconds]
[-description service_desc]
下面的命令是我自己项目中安装NT服务:
JavaService.exe -install TestService "%JAVA_HOME%"/jre/bin/server/jvm.dll -Xmx128m -Djava.class.path="%JAVA_HOME%"/lib/tools.jar;"%CD%"/lib/jtds-1.2.5.jar;"%CD%" -start com.azure.TestService -method startService -stop com.azure.TestService -method stopService -out "%CD%"/log/log.log -err "%CD%"/log/error.log -current "%CD%" -auto
成功安装服务后就可以用以下命令对其进行卸载,启动和停止操作。
JavaService.exe -uninstall TestService
net start TestService
net stop TestService
这样以后安装升级维护也挺麻烦,DOS命令还容易出错,不推荐,因此找了下面的第二种方式
2、使用 Java Service Wrapper 安装jar包
Java Service Wrapper使用可视的配置文件,将参数进行配置化保存,使用方便且不会增加记忆压力
使用之前参考了如下文章:
http://www.blackzs.com/archives/679 (可参考该文章配置Artifacts,第三点以后可忽视,因为Java Service Wrapper有特定文件夹管理)
http://286.iteye.com/blog/1921414 (该文章详细的说明了Java Service Wrapper配置文件的含义)
参考了之后,准备下载文件,Java Service Wrapper下载地址:http://wrapper.tanukisoftware.com/doc/english/download.jsp
由于我的服务器是64位的,在下载的时候发现64位下没有免费版的,又担心其他2个版本要收费,故也没有下载其他2个版本,在网上寻找破解版的,最后在这个网址上下载了一个:
https://www.krenger.ch/blog/java-service-wrapper-3-5-14-for-windows-x64/
我下载的版本是3.5.14。
然后开始进行配置:
1.在我的服务器上新建了一个文件夹,取名 jar_jsw。
2.解压下载的zip包。
3.在新建的文件夹jar_jsw下新建bin、conf、lib、logs文件夹,并且将需要启动的jar包复制到jar_jsw目录下,我的jar包为:processapp.jar
4.把解压后的文件夹中src\bin中的文件复制到新建的jar_jsw/bin文件夹下面。并把所有文件的in后缀去掉。同时把解压后文件夹中bin下的wrapper.exe也放到新建的bin下
5.把解压后的文件夹中src\conf中的文件复制到新建的conf文件夹中。把in后缀去掉,其实只有一个文件,即wrapper.conf。
6.把解压后的文件夹中lib中的wrapper.jar与wrapper.dll放到新建的lib下面。同时把启动jar包程序所需要的第三方jar包也放在这里。
7.开始配置wrapper.conf文件。配置选项请参见其它的文章。
8.配置以后,点击bin文件夹下面的App.bat进行测试,如果能够在console中出现正常结果的话就表明配置正确。然后点击InstallApp-NT.bat安装服务,也可以点击UninstallApp-NT.bat卸载服务。成功安装服务后可以在window服务管理中看到。
注:我的jar包使用了 System.getProperty("user.dir") 来获取工作目录,按照默认的设置,我启动的程序要报错,总是报找不到文件。于是我在网上查看jsw是否有修改工作目录的参数,最后在此进行了参考:
https://wrapper.tanukisoftware.com/doc/english/properties.html
发现有 wrapper.working.dir 这个设置,于是参考其设置:https://wrapper.tanukisoftware.com/doc/english/prop-working-dir.html

当修改了工作目录后,其对应的classpath等参数也需要做相应的变动,如上图所示的参数。我修改之后一切OK。
至此,我将jar包包装成windows服务完成。
写在后面,我发现activemq也是使用此方法安装的服务。
异常处理
1、如果报org.tanukisoftware.wrapper.test.Main不存在。
wrapper.java.mainclass=org.tanukisoftware.wrapper.test.Main
修改成
wrapper.java.mainclass=org.tanukisoftware.wrapper.WrapperSimpleApp
总之,如果报相关类不存在,就要仔细查看配置路径,以及LIB是否全等。
2.、所有错误均记录在log/wrapper.log下。
3、JVM did not exit on request, terminated ,如果报此错误说明你没有按我上面写的去配置,而是将主程序配置在了wrapper.java.mainclass,其实这种配置方式也可以,只是与我的写法不一样而已,如果你非要写在manclass,那具体解决方案可参考:http://bbs.csdn.net/topics/90143848 查看10楼回答。
4、There were 5 failed launches in a row, each lasting less than 300 seconds. Giving up。此错误是由于配置主方法导致的,注意wrapper.app.parameter.1的路径以及是否去掉了它前面的#。
原文:http://www.bubuko.com/infodetail-2169827.html (本文加了一些补充)
Java Service Wrapper将jar包安装成Windows服务的更多相关文章
- Java的jar文件安装成windows 服务
Java的jar文件安装成windows 服务: 1.下载:nssm,复制到jar文件目录下 2. jar文件目录下创建bat文件[run.bat],内容为[java -jar 文件名.jar] 3. ...
- 使用winsw将spring-boot jar包注册成windows服务
背景:最近的项目中使用spring-boot, https://github.com/kohsuke/winsw/releases <service> <id>YJPSS< ...
- Winsw将jar包部署为windows服务
1. 下载Winsw https://github.com/winsw/winsw/releases 下载winsw官网上的xml文件和.exe文件 2. 编辑配置文件 创建一个文件夹demo,将所需 ...
- Nginx 安装成 Windows 服务
Nginx 安装成Windows 服务方法,具体方法如下 1. 下载nginx windows版本 http://www.nginx.org 2. 下载微软的2个工具: instsrv.exe.srv ...
- ELK安装成windows服务
一.Elasticsearch安装成windows服务 我的es所在路径为:D:\ELK5.5.0\elasticsearch-5.5.0 Java 安装目录为:C:\Program Files\Ja ...
- 【先定一个小目标】Redis 安装成windows服务-开机自启
1.第一步安装成windows服务的,开机自启动 redis-server --service-install redis.windows.conf 2.启动\关闭 redis-server --se ...
- Redis是可以安装成windows服务-开机自启
其实Redis是可以安装成windows服务的,开机自启动,命令如下 redis-server --service-install redis.windows.conf 安装完之后,就可看到Redis ...
- 使用srvany.exe把程序安装成windows服务的方法
http://mazhihui.iteye.com/blog/1294431 srvany.exe是什么? srvany.exe是Microsoft Windows Resource Kits工具集的 ...
- 使用srvany.exe将程序安装成windows服务的详细教程
srvany.exe介绍 srvany.exe是Microsoft Windows Resource Kits工具集的一个实用的小工具,用于将任何EXE程序作为Windows服务运行.也就是说srva ...
随机推荐
- js中判断变量不为空或null
var content=$("content").val(); if(!content){ alert("请输出内容!"); return; ...
- GO语言GIN框架入门
Gin框架介绍 Gin是一个用Go语言编写的web框架.它是一个类似于martini但拥有更好性能的API框架, 由于使用了httprouter,速度提高了近40倍. 中文文档 Gin框架安装与使用 ...
- [代码质量] Git统计本次提交新增代码行数,建议每个评审commit新增行数小于400行
git log HEAD~1..HEAD --author="$(git config --get user.name)" --pretty=tformat: --numstat ...
- Unity3D获取Android平台的电量
刚开始的时候以为这个应该不简单.我也开始百度,寻找获取手机的电量的方法.大概有俩种方式:一种是直接访问一个文件,意思是说Android手机的电量等信息保存到了这个文件中.但是我试验的时候没有访问出来, ...
- mysql索引原理及优化(二)
索引原理分析:数据结构 索引是最常见的慢查询优化方式其是一种优化查询的数据结构,MySql中的索引是用B+树实现,而B+树就是一种数据结构,可以优化查询速度,可以利用索引快速查找数据,优化查询. 可以 ...
- LoadRunner之录制你的第一个脚本
LoadRunner安装完成之后,肯定就迫不及待的想要上手试用了.下面就是讲一下LR脚本录制的流程和基本的设置. 1.先放一张脚本录制以及运行的流程图 2.脚本录制步骤 1)以管理员身份打开LR软件, ...
- Java基础 try...catch...catch 使用Exception,去捕获其子类异常
JDK :OpenJDK-11 OS :CentOS 7.6.1810 IDE :Eclipse 2019‑03 typesetting :Markdown code ...
- 轻量级Web服务器http-server
http-server是一个简单的零配置命令行http服务器.可用于h5页面手机端测试 Vue .Angualr.React项目打包后真机测试 github地址:https://github.com/ ...
- uni-app v-for循环遍历 动态切换class、动态切换style
动态切换class,主要代码::class="i.themColor" <view v-for="i in htmlJSON" class=" ...
- 通过Onvif设备探索获取EasyNVR网页无插件播放所需要的摄像机硬盘录像机NVR的RTSP地址
想实现网络监控摄像头进行视频直播的朋友门应该知道,方法其实非常简单,你不需要使用支持直播的网络摄像机,只需要经过一套流媒体服务器将监控摄像头的RTSP视频流转为RTMP\HLS\HTTP-FLV视频流 ...