Java Service Wrapper简介与使用

简介:

   在实际开发过程中很多模块需要独立运行,他们并不会以web形式发布,传统的做法是将其压缩为jar包独立运行,这种形式简单易行也比较利于维护,但是 一旦服务器重启或出现异常时,程序往往无法自行修复或重启。解决服务器重启的传统做法是编写一段shell脚本随服务器启动而运行,但是这样做只是治标, 那么我们想寻求一种“治本”的方式该怎么办呢?
        Java Service Wrapper就轻松而简单的为我们解决了这些问题。"Java Service Wrapper"顾名思义,将我们的Java程序包装成系统服务,这样就可以随着系统的运行而自动运行,当然Java Service Wrapper(下面简称Wrapper)的功能绝不仅于此。


        Wrapper下载地址:http://wrapper.tanukisoftware.com/doc/english/download.jsp



 

        通过下载页面我们可以看到Wrapper几乎支持所有的系统环境,说明Wrapper在这方面还是很下工夫的,目前最新版本为3.5.20,我们选择Linux x86版本下载,解压后目录组成如下图所示:



 

        为了更直观的了解Wrapper的目录及文件结构,可以通过"tree"命令列出Wrapper的所有文件树,cmd控制台下输入命令:

  1. tree /f  
  2.   
  3. 显示目录结构如下:  
  4. wrapper-linux-x86.  
  5.     │  jdoc.tar.gz             //javadoc文件  
  6.     │  README_de.txt           //说明  
  7.     │  README_en.txt           //说明  
  8.     │  README_es.txt           //说明  
  9.     │  README_ja.txt           //说明  
  10.     │  
  11.     ├─bin                      //执行文件目录  
  12.     │      demoapp             //示例程序  
  13.     │      testwrapper         //测试程序  
  14.     │      wrapper           //主程序(重要)  
  15.     │  
  16.     ├─conf                     //配置文件目录  
  17.     │      demoapp.conf        //示例配置文件  
  18.     │      wrapper.conf      //主配置文件(重要,文件名可修改)  
  19.     │  
  20.     ├─doc                      //说明文档目录  
  21.     │      index.html          //首页  
  22.     │      revisions.txt       //版本说明  
  23.     │      wrapper-community-license-1.1.txt  //许可协议  
  24.     │  
  25.     ├─jdoc                     //javadoc文档目录  
  26.     │      index.html          //首页  
  27.     │  
  28.     ├─lib                      //依赖类库目录  
  29.     │      libwrapper.so     //wrapper linux文件(.so:用户层的动态库)  
  30.     │      wrapper.jar       //wrapper主程序(重要)  
  31.     │      wrapperdemo.jar     //示例程序  
  32.     │      wrappertest.jar     //测试程序  
  33.     │  
  34.     ├─logs                     //日志目录  
  35.     │      wrapper.log         //日志文件  
  36.     │  
  37.     └─src                      //源代码目录  
  38.         ├─bin                  //执行程序目录  
  39.         │      sh.script.in  //shell脚本源代码(重要)  
  40.         └─conf                 //配置目录  
  41.             wrapper.conf.in    //原始配置  

 

        以下是官方给出的一些Wrapper的优点:

        (1) 使用我们的产品无须在你的程序中添加任何额外的代码。
        (2) 当你的程序或JVM出现问题时会自动响应事先定制的策略。
        (3) 当出现问题时会及时进行通知。
        (4) 完善的日志记录功能可以更好为您提供支持。
        (5) 在不同的系统上你可以指定一个标准的流程相同流程,也就是说相同的程序可以不必修改即运行于不同系统。
        (6) 可以将你的应用安装成windows或unix的服务或守护进程。

 

        看到Wrapper有这么多好处,那么我们就通过Wrapper自带的示例程序来进一步了解Wrapper吧:
        1.创建服务工作目录,以操作系统为Linux,目录结构为usr/local/wrapper为例,按照上面的目录结构,在其下创建"bin","conf","lib","logs"这四个相同名称的文件夹。
        2.将配置及程序文件复制至相应目录(也就是上面标的文件);
        (1)bin 目录下的wrapper 文件复制到usr/local/wrapper/bin下。
        (2)src\bin 目录下的sh.script.in 文件复制到usr/local/wrapper/bin下,并将.in后缀名删除并修改名称,修改后为javaService.script。
        (3)conf 目录下的wrapper.conf 文件复制到usr/local/wrapper/conf下。
        (4)lib 目录下的wrapper.jar 和libwrapper.so 文件复制到usr/local/wrapper/lib下。
        注:以上是正式环境所需文件的配置方式,这里我们需要运行Wrapper自带的demo程序,所以需要将demoapp,demoapp.conf,wrapperdemo.jar 这三个文件复制到相应目录。
        3.进入bin目录执行以下命令:

  1. ./demoapp start  

 
        接下来会显示很多提示,最终显示如下页面:



 

        出现此页面证明你的程序已经运行成功了,恭喜!
        如果启动失败,我们可以查看logs日志内容,如下:

  1. STATUS | wrapper  | 2013/07/30 11:22:47 | --> Wrapper Started as Daemon  
  2. STATUS | wrapper  | 2013/07/30 11:22:47 | Java Service Wrapper Community Edition 64-bit 3.5.20  
  3. STATUS | wrapper  | 2013/07/30 11:22:47 |   Copyright (C) 1999-2013 Tanuki Software, Ltd. All Rights Reserved.  
  4. STATUS | wrapper  | 2013/07/30 11:22:47 |     http://wrapper.tanukisoftware.com  
  5. STATUS | wrapper  | 2013/07/30 11:22:47 |   
  6. STATUS | wrapper  | 2013/07/30 11:22:47 | Launching a JVM...  
  7. INFO   | jvm 1    | 2013/07/30 11:22:47 | WrapperManager: Initializing...  
  8. INFO   | jvm 1    | 2013/07/30 11:22:47 | DemoApp: Initializing...  
  9. INFO   | jvm 1    | 2013/07/30 11:22:47 | Demo: start()  
  10. INFO   | jvm 1    | 2013/07/30 11:22:47 | Demo: Showing dialog...  
  11. INFO   | jvm 1    | 2013/07/30 11:22:47 | Demo:   
  12. INFO   | jvm 1    | 2013/07/30 11:22:47 | Demo: ERROR - Unable to display the GUI:  
  13. INFO   | jvm 1    | 2013/07/30 11:22:47 | Demo:           java.awt.HeadlessException:   
  14. INFO   | jvm 1    | 2013/07/30 11:22:47 | No X11 DISPLAY variable was set, but this program performed an operation which requires it.  
  15. INFO   | jvm 1    | 2013/07/30 11:22:47 | Demo:   
  16. INFO   | jvm 1    | 2013/07/30 11:22:47 | Demo: This demo requires a display to show its GUI.  Exiting...  
  17. INFO   | jvm 1    | 2013/07/30 11:22:48 | Demo: stop(0)  
  18. STATUS | wrapper  | 2013/07/30 11:22:49 | <-- Wrapper Stopped  

 

        从日志内容可以查看程序及服务的运行状态,Wrapper日志采用此种格式:类型 | 拥有者 | 时间 | 具体内容

        日志内容显示我们的Linux系统没有安装图形界面或者根本没有显卡。

        注:这里需要说明一下,Wrapper运行首先需要Java运行环境支持,所以在使用Wrapper前请先确认已安装好了Java

 

        下面我们来尝试一下无参数调用服务的方式,如:

  1. ./testwrapper  
  2. ./demoapp  

        两者的提示相同,都为:

  1. Usage: ./程序 名 [ console {JavaAppArgs} | start {JavaAppArgs} | stop | restart {JavaAppArgs} | condrestart {JavaAppArgs} | status | install | remove | dump ]  
  2.   
  3. Commands:  
  4.   console      Launch in the current console.  
  5.   start        Start in the background as a daemon process.  
  6.   stop         Stop if running as a daemon or in another console.  
  7.   restart      Stop if running and then start.  
  8.   condrestart  Restart only if already running.  
  9.   status       Query the current status.  
  10.   install      Install to start automatically when system boots.  
  11.   remove       Uninstall.  
  12.   dump         Request a Java thread dump if running.  
  13.   
  14. JavaAppArgs: Zero or more arguments which will be passed to the Java application.  

 

        原来Wrapper提供了很多种参数的选择,如:start为启动,stop为停止。下面为参数的详细解释:

  1. Commands:  
  2.   console      启动并显示控制台信息  
  3.   start        作为一个守护进程后台启动  
  4.   stop         停止程序  
  5.   restart      重启程序  
  6.   condrestart  重启已经运行的程序,与前者区别是程序必须已经在运行  
  7.   status       查看该程序状态  
  8.   install      将程序安装为自启动服务,即随系统启动而启动  
  9.   remove       卸载自启动服务  
  10.   dump         报告运行时的Java thread dump(thread dump百度百科:http://baike.baidu.com/view/5111187.htm)  

 

        我们还发现单独运行wrapper命令时的提示内容与前面两者不同,如下所示:

  1. Java Service Wrapper Community Edition 64-bit 3.5.20  
  2.   Copyright (C) 1999-2013 Tanuki Software, Ltd. All Rights Reserved.  
  3.     http://wrapper.tanukisoftware.com  
  4.   
  5. Usage:  
  6.   ./wrapper <command> <configuration file> [configuration properties] [...]  
  7.   ./wrapper <configuration file> [configuration properties] [...]  
  8.      (<command> implicitly '-c')  
  9.   ./wrapper <command>  
  10.      (<configuration file> implicitly 'wrapper.conf')  
  11.   ./wrapper  
  12.      (<command> implicitly '-c' and <configuration file> 'wrapper.conf')  
  13.   
  14. where <command> can be one of:  
  15.   -c  --console run as a Console application  
  16.   -v  --version print the wrapper's version information.  
  17.   -?  --help    print this help message  
  18.   -- <args>     mark the end of Wrapper arguments.  All arguments after the  
  19.                 '--' will be passed through unmodified to the java application.  
  20.   
  21. <configuration file> is the wrapper.conf to use.  Name must be absolute or relative  
  22.   to the location of ./wrapper  
  23.   
  24. [configuration properties] are configuration name-value pairs which override values  
  25.   in wrapper.conf.  For example:  
  26.   wrapper.debug=true  
  27.   
  28.   Please note that any file references must be absolute or relative to the location  
  29.   of the Wrapper executable.  

 

        因为wrapper是Wrapper运行的主程序也是核心,他无法单独运行需要通过src/bin中的sh.script.in这个shell脚本调用,这个文件的使用我们之后会讲到。
        运行wrapper可以按如上提示添加参数,如:./wrapper -c wrapper.properties

        以上就是对Wrapper的一个整体认识,希望此文可以帮助大家更快的上手并使用Wrapper,之后几篇文章会详细讲解Wrapper的配置及定制自己的应用。

 

分类:  java

本文转自快乐就好博客园博客,原文链接:http://www.cnblogs.com/happyday56/p/4204090.html,如需转载请自行联系原作者
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
9月前
|
人工智能 安全 Java
Go与Java泛型原理简介
本文介绍了Go与Java泛型的实现原理。Go通过单态化为不同类型生成函数副本,提升运行效率;而Java则采用类型擦除,将泛型转为Object类型处理,保持兼容性但牺牲部分类型安全。两种机制各有优劣,适用于不同场景。
410 24
|
9月前
|
人工智能 Java
java中static关键字简介
`static`关键字用于修饰类的成员变量和方法,使其属于类而非对象。静态成员可通过类名直接访问,无需实例化对象。静态方法只能访问静态成员,不能直接访问非静态成员或使用`this`关键字。此外,静态代码块在类首次加载时执行且仅执行一次,适用于初始化操作。
232 0
|
存储 缓存 算法
JVM简介—1.Java内存区域
本文详细介绍了Java虚拟机运行时数据区的各个方面,包括其定义、类型(如程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区和直接内存)及其作用。文中还探讨了各版本内存区域的变化、直接内存的使用、从线程角度分析Java内存区域、堆与栈的区别、对象创建步骤、对象内存布局及访问定位,并通过实例说明了常见内存溢出问题的原因和表现形式。这些内容帮助开发者深入理解Java内存管理机制,优化应用程序性能并解决潜在的内存问题。
687 29
JVM简介—1.Java内存区域
|
Java Linux API
课时3:Java简介(Java主要特点)
本文介绍了Java的主要特点及其运行机制。Java结合了编译型和解释型语言的优点,通过Java虚拟机(JVM)实现跨平台移植,简化了不同操作系统间的开发流程。Java的特点包括可移植性、简单易用、支持多线程编程、自动垃圾收集和面向对象编程。随着硬件技术的发展,Java的性能问题已大大改善,成为行业标准之一,广泛应用于各种商用平台开发。
356 1
|
开发框架 移动开发 Java
课时2:Java简介(Java发展概述)
课时2:Java简介(Java发展概述) 摘要: 1. Java基础知识:介绍Java作为编程语言及其思想。 2. Java的发展历史:从1991年GREEN项目到1995年正式推出,历经网景公司、HotJava浏览器等关键节点。 3. Java的版本信息:涵盖从JDK 1.0到JDK 1.8的主要版本及特性,如Lambda表达式和模块化支持。
339 0
|
存储 Java C语言
课时11:Java数据类型简介
本文介绍了Java中的数据类型划分,主要分为基本数据类型和引用数据类型。基本数据类型包括数值型(整型、浮点型)、布尔型和字符型,每种类型有固定的默认值和存储范围。引用数据类型涉及内存使用,如数组、类和接口,默认值为Null。文中还提供了不同类型的选择原则,帮助开发者在实际编程中合理选用数据类型。
151 0
|
Oracle Java Unix
课时1:认识Java(Java发展简介)
课时1:认识Java(Java发展简介)。主讲人李兴华介绍了Java的起源、发展历程及其广泛应用。Java由Sun公司开发,最初为嵌入式系统设计,后演变为三大方向:Java SE、Java ME和Java EE。尽管面临版权争议等挑战,Java仍是最流行的编程语言之一,广泛应用于大型企业及互联网平台开发。
172 0
|
自然语言处理 Java 关系型数据库
Java mysql根据很长的富文本如何自动获取简介
通过使用Jsoup解析富文本并提取纯文本,然后根据需要生成简介,可以有效地处理和展示长文本内容。该方法简单高效,适用于各种应用场景。希望本文对您在Java中处理富文本并生成简介的需求提供实用的指导和帮助。
276 9
|
存储 JavaScript Java
Java 中的 String Pool 简介
本文介绍了 Java 中 String 对象及其存储机制 String Pool 的基本概念,包括字符串引用、构造方法中的内存分配、字符串文字与对象的区别、手工引用、垃圾清理、性能优化,以及 Java 9 中的压缩字符串特性。文章详细解析了 String 对象的初始化、内存使用及优化方法,帮助开发者更好地理解和使用 Java 中的字符串。
242 2
Java 中的 String Pool 简介
|
存储 Java 编译器
java wrapper是什么类
【10月更文挑战第16天】
554 3