zoukankan      html  css  js  c++  java
  • 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.把解压后的文件夹中srcin中的文件复制到新建的jar_jsw/bin文件夹下面。并把所有文件的in后缀去掉。同时把解压后文件夹中bin下的wrapper.exe也放到新建的bin下

    5.把解压后的文件夹中srcconf中的文件复制到新建的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  (本文加了一些补充)  

  • 相关阅读:
    百度网盘下载太慢,试试阿里云网盘?
    linux使用过程中遇到的常见问题
    vscode设置护眼色
    为什么程序员互相之间不能透露薪水?
    机器学习:支持向量机(SVM)
    Java多线程总结(三)
    Java多线程总结(二)
    Java多线程总结(一)
    8.多线程--避免活跃性危险
    7.多线程--线程池的使用
  • 原文地址:https://www.cnblogs.com/minily/p/8675489.html
Copyright © 2011-2022 走看看