Java魔法堂:以Windows服务的形式运行Java程序

一、前言                            

  由于防止维护人员误操作关闭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.1=../lib/wrapper.jar
wrapper.java.classpath.2=.

# 配置lib路径
wrapper.java.library.path.1=../lib

# 配置服务的main class(就是原有项目的程序入口类)
wrapper.app.parameter.1=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.1001=Exception in thread "*" java.lang.OutOfMemoryError
wrapper.filter.allow_wildcards.1001=TRUE
wrapper.filter.action.1001=RESTART
wrapper.filter.message.1001=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://blog.csdn.net/arjick/article/details/4526392

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术分享

关于RBAC(Role-Base Access Control)的理解

有两种正在实践中使用的RBAC访问控制方式:隐式(模糊)的方式和显示(明确)的方式。

25080
来自专栏阮一峰的网络日志

Content Security Policy 入门教程

跨域脚本攻击 XSS 是最常见、危害最大的网页安全漏洞。 ? 为了防止它们,要采取很多编程措施,非常麻烦。很多人提出,能不能根本上解决问题,浏览器自动禁止外部注...

33650
来自专栏应用案例

Hexo博客的安装部署及多电脑同步

Hexo安装教程很多,我这里尽可能的讲的细一些,把容易踩坑的地方以及后期多电脑同步所遇到的问题列出来,以便给自己及大家参考。本文主要讲解安装部署后源文件同步问题...

1.4K70
来自专栏difcareer的技术笔记

Android启动过程分析-从按下电源键到第一个用户进程[转载]正文

对Android最初的启动过程一直没有清晰的认识,看到一篇好文,转载一下: http://blog.jobbole.com/67931/ http://ww...

7820
来自专栏耕耘实录

Linux系统下漏洞扫描、评估工具OpenVAS9的安装与使用

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢。

31420
来自专栏晨星先生的自留地

DNS(下)之域传送漏洞

31830
来自专栏杂烩

otter安装 原

    https://github.com/alibaba/otter/wiki/QuickStart

12030
来自专栏伦少的博客

HDFS DataNode启动异常:/opt/jdk1.8.0_151/bin/java:权限不够

15630
来自专栏IT可乐

Linux系列教程(十八)——Linux文件系统管理之文件系统常用命令

  通过前面两篇博客,我们介绍了Linux系统的权限管理。Linux权限管理之ACL权限 介绍了通过设定 ACL 权限,我们为某个用户指定某个文件的特定权限,这...

218100
来自专栏ytkah

thinkcmf安装教程与目录结构详解 快速上手版

  最近接了一个建站项目,要求用thinkcmf来搭建,ytkah在想php都大致一样吧,快速地下载安装包,可是!怎么安装呢?没看到安装指引文件或目录,查看了安...

54340

扫码关注云+社区

领取腾讯云代金券