一、前言                            

由于防止维护人员误操作关闭Java控制台程序,因此决定将其改造为以Windows服务的形式运行。弄了一个上午总算搞定了,下面记录下来,以供日后查阅。

二、Java Service Wrapper                  

官网地址:http://wrapper.tanukisoftware.com/doc/english/download.jsp

JavaServiceWrapper以守护进程或windows服务的方式运行java程序。JSW提供四种方案改造原有项目,以实现守护进程或windows服务的方式运行。而且还提供JVM监控功能和自动重启功能,反正十分强大的样子。

  方式1:WrapperSimpleApp

  用于通过同一个类实现启动和关闭的程序。
  官方推荐使用该方式加工原有项目,好处是简单,且不用修改原有项目的代码。

  步骤1:下载并解压得到工具包,目录结构如下    

    /
    |-- bin,wrapper控制windows服务的bat文件
    |-- conf,wrapper配置文件
    |-- doc,教程
    |-- lib,wrapper的依赖包
    |-- logs,日志
    |-- src,模板
      |-- conf
      |-- bin

步骤2:搭建项目结构:新建项目发布目录(假设为agent),然后将src下的conf和bin复制到agent下,并且将conf和bin下的文件重命名,去掉`.in`后缀。然后将bin/wrapper.exe复制到agent/bin/下,再将lib复制到agent下,得到目录结构如下

    agent
     |-- lib
         |-- wrapper.dll
       |-- wrapper.jar
       |-- conf
         |-- wrapper.conf
       |-- bin
       |-- wrapper.exe
       |-- 一堆bat文件
     最后将原有项目的文件复制到bin目录下。

步骤3:配置agent/conf/wrapper.conf的参数

# 配置java命令路径
wrapper.java.command=jre/bin/java # 配置CLASSPATH路径(并不会修改全局的环境变量)
# 若原有项目还依赖其他jar包,均需要添加进来
wrapper.java.classpath.=../lib/wrapper.jar
wrapper.java.classpath.=. # 配置lib路径
wrapper.java.library.path.=../lib # 配置服务的main class(就是原有项目的程序入口类)
wrapper.app.parameter.=agent.Daemon # 配置wrapper日志文件
wrapper.logfile=logs/Agent.log # 配置系统服务名称
wrapper.ntservice.name=AgentService # 配置系统服务显示的名称
wrapper.ntservice.displayname=AgentService # 配置系统服务描述
wrapper.ntservice.description=AgentService # 配置系统服务的启动方式,取值范围是AUTO_START或DEMAND_START
wrapper.ntservice.starttype=AUTO_START # 配置内存溢出则重启服务
wrapper.filter.trigger.=Exception in thread "*" java.lang.OutOfMemoryError
wrapper.filter.allow_wildcards.=TRUE
wrapper.filter.action.=RESTART
wrapper.filter.message.=The JVM has run out of memory.

步骤4:安装、卸载服务

点击对应的Install.bat和Uninstall.bat即可。

  2. 方式2:WrapperStartStopApp

  用于像tomcat那样,启动程序和关闭程序是分开的项目。该方式同样不用修改原来项目的代码。

  3. 方式3:WrapperListener

  该方式需要修改原来项目的代码,但最灵活。

  4. 方式4:WrapperJarApp

  用于原有项目已经打包为jar或war包的情况,配置方式与`WrapperSimpleApp`相似,但`wrapper.app.parameter.1=jar或war包路径`。该方式同样不用修改原来项目的代码

三、总结                                

官方文档以JBOSS为例子说明WrapperSimpleApp的使用,十分不好懂,幸好有前人记录实操过程我才从苦海得救,感谢感谢。

尊重原创,转载请注明来自:http://www.cnblogs.com/fsjohnhuang/p/4019267.html  ^_^肥仔John

四、参考                                

http://blog.csdn.net/arjick/article/details/4526392

Java魔法堂:以Windows服务的形式运行Java程序的更多相关文章

  1. Java魔法堂:类加载器入了个门

    一.前言 <Java魔法堂:类加载机制入了个门>中提及整个类加载流程中只有加载阶段作为码农的我们可以入手干预,其余均由JVM处理.本文将记录加载阶段的核心组件——类加载器的相关信息,以便日 ...

  2. Windows环境下设置Tomcat8以服务的形式运行,不再打开Tomcat窗口

    内容简介 在Windows操作系统下,设置Tomcat8以服务的形式运行,按照以下3步来操作即可.前提条件:已安装好Java环境,并配置好java的环境变量:已下载好Tomcat8并解压到某目录. s ...

  3. Java魔法堂:打包知识点之jar

    一.前言    通过eclipse导出jar包十分方便快捷,但作为码农岂能满足GUI的便捷呢?所以一起来CLI吧! 二.JAR包 JAR包是基于ZIP文件格式,用于将多个.java文件和各种资源文件, ...

  4. 【转】Java魔法堂:String.format详解

    Java魔法堂:String.format详解     目录     一.前言    二.重载方法     三.占位符     四.对字符.字符串进行格式化     五.对整数进行格式化     六. ...

  5. C#-Windows服务创建和运行

    Windows服务创建和运行    适用场景: ASP.Net通常是一个无状态的提供程序,不支持持续运行代码或者定时执行某段代码,所以我们需要构建自己的Windows服务来运行那些定时任务. 项目中需 ...

  6. 在OSX和Windows版本Docker上运行GUI程序

    看到很多人在Docker问题区讨论:如何在OS X和Windows的Docker上运行GUI程序, 随手记录几个参考资料: https://github.com/docker/docker/issue ...

  7. JAVA设置环境变量和在DOS下运行java程序

    在学校实训的这几天,老师带着我们开始深入的复习java.这是第一天的内容哦 对于“JAVA设置环境变量和在DOS下运行java程序”,许多初学者是陌生的,但了解这个却对后期的学习很重要. http:/ ...

  8. 在windows中:双击运行Python程序、后台运行Python程序

    在windows中:双击运行Python程序.后台运行Python程序 安装Python解释器的windows环境,如果双击运行*.py的文件,会闪退.怎样避免闪退呢? 我们用python的日志输出程 ...

  9. Java魔法堂:类加载机制入了个门

    一.前言 当在CMD/SHELL中输入 $ java Main<CR><LF> 后,Main程序就开始运行了,但在运行之前总得先把Main.class及其所依赖的类加载到JVM ...

随机推荐

  1. 【Vegas原创】vlookup的使用方法

    情景: 1,当月移动话单,没有姓名,只有手机号码:(用户费用sheet) 2,IT部自己整理的手机号历史记录,有姓名,有手机号码:(历史信息sheet) 3,要求:需要从历史记录中,透视出当月所有手机 ...

  2. asp.net中TreeView的大数据加载速度优化

    由于数据量太大,加载树时间很长,所以进行了优化 前台 .aspx <asp:Panel ID="Panel2" runat="server" Height ...

  3. asp.net 后台获取flv视频地址进行播放

    源码下载:http://download.csdn.net/detail/njxiaogui/7609687 前台:.aspx <table> <tr> <td>& ...

  4. hive中grouping sets的使用

    hive中grouping sets 数量较多时如何处理?    可以使用如下设置来 set hive.new.job.grouping.set.cardinality = 30; 这条设置的意义在于 ...

  5. Metaweblog在Android上使用

    同步发表于http://avenwu.net/2015/02/04/metaweblog metaweblog是一个博客接口协议,目前主流的博客平台均支持该协议,比如博客园,CSDN,WordPres ...

  6. 解决Windows Server2008 R2中IE开网页时弹出阻止框(Windows Server2008网页无法打开的问题)

    相信使用Windows Server2008的朋友都遇到过这种情况,用IE打开网站时会弹出“Internet Explorer增强安全配置正在阻止来自下列网站的此应用程序中的内容”的对话框.如下图所示 ...

  7. 在Window下安装Oracle 12C Cloud Control Agent

    ① 准备好安装源,这个ORACLE普通账号无法下载到,有需要的可以联系我   p14570373_112000_Generic.zip,用于Windows 64位操作系统 ② 解压p14570373_ ...

  8. Google 面试题:Java实现用最大堆和最小堆查找中位数 Find median with min heap and max heap in Java

    Google面试题 股市上一个股票的价格从开市开始是不停的变化的,需要开发一个系统,给定一个股票,它能实时显示从开市到当前时间的这个股票的价格的中位数(中值). SOLUTION 1: 1.维持两个h ...

  9. Android 结合实例学会AsyncTask的用法

    AsyncTask执行时经过四个步骤,执行四个方法: 1.onPreExecute(),运行在UI线程,可以设置或修改UI控件,如显示一个进度条 2.doInBackground,运行在后台线程,不可 ...

  10. 解决mac os x下 tomcat启动报 java.net.BindException: Permission denied <null>:80 错误

    我在mac os x上启动tomcat的时候,报 java.net.BindException: Permission denied <null>:80,java.net.BindExce ...