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  (本文加了一些补充)  

  • 相关阅读:
    Spring基础知识
    Hibernate基础知识
    Struts2基础知识
    在eclipse里头用checkstyle检查项目出现 File contains tab characters (this is the first instance)原因
    java后台获取cookie里面值得方法
    ckplayer 中的style.swf 中的 style.xml 中的修改方法
    java hql case when 的用法
    Windows下Mongodb安装及配置
    Mongodb中经常出现的错误(汇总)child process failed, exited with error number
    Mac 安装mongodb
  • 原文地址:https://www.cnblogs.com/minily/p/8675489.html
Copyright © 2011-2022 走看看