- 浏览: 688281 次
- 性别:
- 来自: 合肥
文章分类
最新评论
-
di1984HIT:
学习了,学习了!
Tomcat的URL中文乱码解决以及传输优化 -
arottenapple:
...
我的二十一天CoreJava 学习笔记 -
黯淡流觞:
...
我的二十一天CoreJava 学习笔记 -
onlyOneToOne:
wsc830719 写道@RequestMapping(val ...
spring mvc3中 ResponseBody中文乱码 -
waj_615:
但是打印订单不是简单的string 啊
用java实现打印功能
用途
在做完一个项目程序后,有时会有两种需求想法。
1.在每次机器重启后自动运行程序。
2.在程序运行过程中如果发生了死锁、内存溢出或程序崩溃等问题时程序能自动重启。
当然。要实现这两种效果的方案有很多。可以在系统引导文件中加入开机运行程序引导,也可以写一个系统监听程序等等。
现在有一个更简单的解决方案。有一个java程序叫Java Service Wrapper。这是用来在windows或unix/linux系统中将java程序包装成系统服务并执行守护进程。
Java Service Wrapper有三个版本。professional/standard/community 前两个版本要收费功能也更多。对我们来说,社区版的已经够用了,(对于死锁重启需要收费版的)。
分析
从软件的名子上就能看出来。这个软件是用来包装的。我们的程序完成以后会有一个main入口。wrapper就是将这个main方法进行包装再提供自己的一个main入口。这样,我们在运行时都是运行的wrapper的程序。它会建立各种监控和服务,在建立完成后再加载运行被包装的方法。等监控到运行的程序出问题了就会进行相应的处理。
所需文件(以windows版本为例)
1.从官网http://wrapper.tanukisoftware.com上下载wrapper的软件。
2.我们只需要几个核心的文件
- wrapper.jar 核心文件,位于lib文件夹中
- wrapper.exe 因为是在windows系统中运行所以需要。位于bin文件夹中
- wrapper.dll 因为是在windows系统中运行所以需要。 位于lib文件夹中
- wrapper.conf 核心配置文件,位于src/conf文件夹中,将后缀名conf.in改成conf
- App.bat (可选)运行你的程序,位于src/bin文件夹中, 将后缀名conf.in改成conf
- InstallApp-NT.bat (可选)将你的程序配置为系统服务,位于src/bin文件夹中, 将后缀名conf.in改成conf
- UninstallApp-NT.bat (可选)将你的程序从系统服务中删除,位于src/bin文件夹中, 将后缀名conf.in改成conf
- StartApp-NT.bat (可选)启动程序的系统服务,位于src/bin文件夹中, 将后缀名conf.in改成conf
- StopApp-NT.bat (可选)停止程序的系统服务,位于src/bin文件夹中, 将后缀名conf.in改成conf
- XXX.jar/XXX.class 你的程序
实现方式
针对不同程序有不同的实现方式。
1.如果你的程序是不间断运行的。则只需要设置配置文件即可。
2.如果你的程序只是在系统启动时运行一次,或不需要连续运行的,则要加入入口包装类。不然,虽然你的程序已经执行成功且退出了(如:在系统启动时检查下环境再给你的提示信息就结束)。但wrapper会认为你的程序不应该结束,会不停的重启你的服务。这时你要加入包装类就没有这个问题了。
示例(我的原程序名为Out.java)
一、通用配置
二、原程序不间断运行
原程序内容
public class Out{ public static void main(String[] args) throws Exception{ System.out.println("\u7a0b\u5e8f\u5f00\u59cb\u8fd0\u884c..."); } }
原程序中只是打印一句话就结束。而我们要的效果是不间断运行,所以wrapper会不断的重启原程序,而会不断的打印语句。
只要改配置文件中的 wrapper.java.mainclass=Out 即可
在运行App.bat之后,你会发现程序会不断的被重启。
三、在内存溢出后重启
原程序内容
public class Out{ public static void main(String[] args) throws Exception{ System.out.println("\u7a0b\u5e8f\u5f00\u59cb\u8fd0\u884c..."); String a="a"; try{ Thread.sleep(2000); }catch(Exception e){} System.out.println("\u7a0b\u5e8f\u5f00\u59cb\u5185\u5b58\u6ea2\u51fa..."); for(int i=0;i<999999999;i++){ a+=a; } System.out.println("end"); } }
原程序中应该能打印3句话,但在打印第二句后就会内存被溢出,最后的end不会被打印。但wrapper发现内存溢出后,会自动重启程序,再次不停的打印前两句和重启。
更改配置文件中内容
wrapper.java.mainclass=Out
wrapper.filter.trigger.1000=Exception in thread "*" java.lang.OutOfMemoryError
wrapper.filter.action.1000=RESTART
四、程序只运行一次,但如果在运行中出现问题程序将重启
public class Out{ public static void main(String[] args) throws Exception{ System.out.println("\u7a0b\u5e8f\u5f00\u59cb\u8fd0\u884c..."); String a="a"; try{ Thread.sleep(2000); }catch(Exception e){} if(args.length>0){ System.out.println("\u7a0b\u5e8f\u5f00\u59cb\u5185\u5b58\u6ea2\u51fa..."); for(int i=0;i<999999999;i++){ a+=a; } } System.out.println("end"); } }
import org.tanukisoftware.wrapper.WrapperListener; import org.tanukisoftware.wrapper.WrapperManager; public class Main implements WrapperListener{ public static void main(String[] args) throws Exception{ Out.main(args); WrapperManager.start(new Main(),args); } public Integer start(String[] args) { System.out.println("start()"); return null; } public int stop(int exitCode) { System.out.println("stop(" + exitCode + ")"); return exitCode; } public void controlEvent(int event) { System.out.println("controlEvent(" + event + ")"); } }
wrapper.filter.trigger.1000=Exception in thread "*" java.lang.OutOfMemoryError
wrapper.filter.action.1000=RESTART
备用
好了,Java Service Wrapper的基本使用就是这么简单。
把第四个示例的内存溢出打个包在这里备份下。以便自己以后使用。
- wrapper.zip (359.9 KB)
- 下载次数: 186
发表评论
-
jetty快速开发时自实现提供jndi服务
2012-07-11 17:21 2257jndi一般是由容器提供,或是启动第三方服务jar包启动。 ... -
spring mvc3中 ResponseBody中文乱码
2012-07-11 14:48 4717使用spring mvc3的@ResponseBody注解以期 ... -
根据颜色检查图片中的产品是否合格
2012-04-23 17:13 1414受朋友之托,做了一个小软件。只是一个练手,现将思路重现。 需 ... -
linux系统命令备忘
2012-03-13 16:35 902ANT tar -zxvf apache-ant ... -
仿log4j定制自己的Log工具类
2012-03-02 16:27 3457原由: log4j是很强大,可每次使用还要加入log4j包, ... -
自制简易提醒器
2012-02-29 19:50 1359每次烧水和吃饭都忘了时间,就想要一个小闹钟。可网上的软件要不就 ... -
Log4j配置备查
2012-02-29 11:09 1205配置日志信息输出目的地,其语法为: log4j.append ... -
英文版linux下安装中文输入法
2012-02-29 11:01 1096首先看一下你的 /var/lib/locales/supp ... -
ubuntu默认禁止root用户登录(备忘)
2012-02-28 11:01 2519ubuntu默认禁止root用户 ... -
WINDOWS下杀死顽固进程命令
2012-02-28 10:59 1829此方法可以杀掉任务管理器杀不掉的进程! 打开cm ... -
读读别人的编程经验
2012-02-28 10:40 9942012-2-28 如何成为一名专家级的开发人员 原 ... -
因练习正则而感受到丰富的解题思路
2011-11-14 15:07 1963不久前,在正则上终于可以登堂入室了,因担心久不练习而使其荒废, ... -
正则研究心得
2011-10-21 16:49 972自己感觉已经在正则上登堂入室了,终于也能体会到它的 ... -
正则表达式截取再整合字符串
2011-10-21 15:44 1501在百度知道中又看到一问题,有意思,可惜 ... -
找出一个字符串中由同一个字符组成的最长子串
2011-10-21 15:15 2106找出一个字符串中由同一个字符组成的最长子串 这是 ... -
设计模式核心笔录
2011-05-25 18:38 1078脑图内容整理成的PD ... -
计算机远程教育视频
2011-05-18 18:37 1034由于自己不是正式的计算机专科出来,中途改行做的程序员。虽然在项 ... -
关于unicode编码的研究
2011-03-28 17:24 1146以前写过一篇贴子是写中文在unicode中的编码范围 unic ... -
unicode中的几大区间
2011-03-28 16:31 1919基本平面 平面0 (0000–FFFF): 基本多文种 ... -
unicode基本平面区的编码区间含义
2011-03-28 15:48 4434基本多文种平面(Basic Multilingual P ...
相关推荐
Java Service Wrapper是一个开源工具,它允许开发者将Java应用程序部署为操作系统级别的服务,确保JVM的稳定运行,尤其在没有GUI的环境下。它适用于多种操作系统,包括Windows和Linux。本部署说明将详细介绍如何使用...
Java Service Wrapper可为应用程序提供以下功能: (1)把应用安装为Windows服务或Linux守护进程; (2)监测JVM运行情况,对于程序原因或内存溢出导致的虚拟机崩溃实现自动重启; (3)记录运行日志;
在Windows系统中,将Java应用程序注册为系统服务能够实现程序的后台自动运行,并在系统启动时自动启动该程序,这对于服务器应用尤为关键。本文将详细介绍如何使用Java Service Wrapper(简称Wrapper)工具将Java程序...
Java程序在Windows操作系统上作为服务运行,是一种常见的部署方式,特别是在需要后台持续运行且与系统启动同步的应用场景中。要实现这一目标,我们可以利用开源工具Winsw,它是一个小型的Windows服务封装器,允许...
JavaService 是一个开源工具,主要用于将Java应用程序包装成Windows服务(NT服务),使得Java程序可以在Windows操作系统环境下作为后台服务运行。这种服务模式对于需要长期运行且不需要用户交互的应用程序非常适用,...
Java Service Wrapper是一款开源工具,用于将任何Java应用程序封装成一个Windows服务或者类Unix守护进程。通过该工具,用户可以方便地控制Java应用程序的启动、停止、暂停和恢复等操作,同时它还提供了一系列管理...
总的来说,Java Service Wrapper提供了一种便捷的方式来将Java程序集成到操作系统服务管理体系中,使得程序能够自动启动、管理和监控,提高了软件的稳定性和可靠性。通过灵活配置`wrapper.conf`,可以满足各种复杂的...
在Windows操作系统中,Java服务是通过Java的Java Service Wrapper(JSW)或者Windows服务宿主(Service Host,svchost.exe)来实现后台运行的。这些服务通常用于提供持续的系统功能,例如Web服务器、数据库连接或...
通过使用Java Service Wrapper,我们可以轻松地将Java程序安装成Windows服务,从而实现后台运行、系统级别的管理和监控等功能。遵循上述步骤,您可以快速地完成配置过程,确保Java程序作为Windows服务稳定运行。 ##...
**Yet Another Java Service Wrapper (YAJSW) 是一个开源项目,专为将Java、Groovy以及本地应用程序转化为服务或守护进程而设计。它的出现提供了一个替代tanuki Java服务包装器的解决方案,该解决方案完全用Java编写...
当Java进程启动后,Wrapper会保持与Java进程的连接,如果Java进程意外退出,Wrapper可以重新启动它,从而实现了服务的高可用性。 在实际应用中,Java Service Wrapper广泛应用于各种需要长期后台运行的Java应用,如...
Java Service Wrapper用于将Java应用转化为Windows NT服务,同时提供的脚本也可将Java应用设置为UNIX后台进程。这样,Java应用程序可以在系统启动时自动运行,无需用户手动启动。 ### 三.技术准备 在制作Java安装...
Wrapper工具,通常指的是Tanuki Software的Java Service Wrapper,它是一个轻量级的系统服务接口,能够将Java应用程序包装成Windows服务或Linux守护进程,使得Java程序能够像其他系统服务一样运行、启动和管理。...
### Java应用程序安装成服务知识点详解 #### 一、概述 在现代软件开发中,Java作为一门广泛应用的语言,其应用程序往往需要长时间稳定运行。为了更好地管理这些应用,将Java应用程序安装为Windows服务是一种常见且...