`

Wrapper配置详解及高级应用

 
阅读更多

  1.文件编码及子配置文件 
        文件头部包含了配置文件编码格式,子配置文件等相关信息,如下所示:

#文件编码,每个配置文件起始位置必须指定该文件的编码格式
encoding=UTF-8

# 如果包含配置文件出现问题可以使用debug调试模式,去掉一个"#",格式为#include.debug
#include.debug

# 包含子配置文件,可以是配置信息也可以是许可信息
include ../conf/wrapper-license.conf
include ../conf/wrapper2.conf

# 是否开启许可文件debug模式
wrapper.license.debug=TRUE

  通过子配置文件的配置可以使主配置文件关联最多10级子配置,例如:wrapper.conf 包含 wrapper2.conf ,wrapper2.conf 包含wrapper3.conf ..... wrapper9.conf 包含wrapper10.conf,文件结构如下:

wrapper.conf
|-wrapper2.conf
|-wrapper3.conf
      .....
|-wrapper9.conf
|-wrapper10.conf

    2.Wrapper 语言设置

        通过这两项的设置可以指定Wrapper 的语言种类,可以在Wrapper 官网下到这些语言包支持,目前不支持中文。

# 指定Wrapper语言,默认使用系统语言
wrapper.lang=en_US

#指定Wrapper 语言资源位置,如果该文件不存在则默认设置为en_US
wrapper.lang.folder=../lang

 

 

        3.Wrapper Java 相关属性配置

        (1)java运行环境设置

# Java 程序配置:
#   (1)默认使用PATH环境变量配置信息则使用下列配置形式
wrapper.java.command=java

#   (2)如果想单独配置运行程序,则可采用此种配置方式
set.JAVA_HOME=/java/path
wrapper.java.command=%JAVA_HOME%/bin/java

# java程序日志级别
wrapper.java.command.loglevel=INFO

 

        (2)程序入口

# Java Main class,也就是程序入口  
#该类需要实现WrapperListener 接口并保证WrapperManager 得到初始化(调用WrapperManager.start(WrapperListener listener, String[] args) 方法)。
wrapper.java.mainclass=com.helloworld.hello.HelloWorld

 

        (3)类库设置

# Java Classpath配置,必须从序号"1"开始,添加新的jar包后序号递增
wrapper.java.classpath.1=../lib/wrapper.jar
wrapper.java.classpath.2=../lib/hello.jar

# Java 类库路径 (Wrapper.DLL 或 libwrapper.so 依赖文件的存放位置)
wrapper.java.library.path.1=../lib

 

        (4)JVM相关配置

# 32/64位选择,true为自动选择
wrapper.java.additional.auto_bits=TRUE

# Java附加参数
wrapper.java.additional.1=

 

        附加参数即为java命令可选参数,如下所示: 

-d32          use a 32-bit data model if available

-d64          use a 64-bit data model if available
-server	  to select the "server" VM
  The default VM is server.
  
-cp <class search path of directories and zip/jar files>
-classpath <class search path of directories and zip/jar files>
  A : separated list of directories, JAR archives,
  and ZIP archives to search for class files.
-D<name>=<value>
  set a system property
-verbose[:class|gc|jni]
  enable verbose output
-version      print product version and exit
-version:<value>
  require the specified version to run
-showversion  print product version and continue
-jre-restrict-search | -jre-no-restrict-search
  include/exclude user private JREs in the version search
-? -help      print this help message
-X            print help on non-standard options
-ea[:<packagename>...|:<classname>]
-enableassertions[:<packagename>...|:<classname>]
  enable assertions
-da[:<packagename>...|:<classname>]
-disableassertions[:<packagename>...|:<classname>]
  disable assertions
-esa | -enablesystemassertions
  enable system assertions
-dsa | -disablesystemassertions
  disable system assertions
-agentlib:<libname>[=<options>]
  load native agent library <libname>, e.g. -agentlib:hprof
    see also, -agentlib:jdwp=help and -agentlib:hprof=help
-agentpath:<pathname>[=<options>]
  load native agent library by full pathname
-javaagent:<jarpath>[=<options>]
  load Java programming language agent, see java.lang.instrument
-splash:<imagepath>
  show splash screen with specified image

 

        内存大小设置:

# Java Heap 初始化大小(单位:MB)
wrapper.java.initmemory=3

# Java Heap 最大值(单位:MB)
wrapper.java.maxmemory=64

 

        应用程序参数设置:

# 应用程序参数,也就是main函数的String[] args参数值,序号需从"1"开始,例如:
wrapper.app.parameter.1=g21121
wrapper.app.parameter.2=http://286.iteye.com/

  

        在main函数和start方法中添加了参数打印语句来观察参数是否已经传入,代码如下:

package com.helloworld.hello;

import org.tanukisoftware.wrapper.WrapperListener;
import org.tanukisoftware.wrapper.WrapperManager;

public class HelloWorld implements WrapperListener {

    public static void main(String[] args) {
        // 打印参数
        for (String arg : args)
            System.out.println(arg);
        WrapperManager.start(new HelloWorld(), args);
    }

    @Override
    public void controlEvent(int event) {
        System.out.println("controlEvent(" + event + ")");
        if ((event == WrapperManager.WRAPPER_CTRL_LOGOFF_EVENT) && (WrapperManager.isLaunchedAsService() || WrapperManager.isIgnoreUserLogoffs())) {
        } else {
            WrapperManager.stop(0);
        }
    }

    @Override
    public Integer start(String[] args) {
        // 打印参数
        for (String arg : args)
            System.out.println(arg);
        System.out.println("hello world!");
        return null;
    }

    @Override
    public int stop(int exitCode) {
        System.out.println("stop(" + exitCode + ")");
        return exitCode;
    }

}

 

        重新运行服务,结果如下:

root@TFS:/usr/local/wrapper/bin# ./hello console
Running helloWorld...
wrapper  | --> Wrapper Started as Console
wrapper  | Java Service Wrapper Community Edition 64-bit 3.5.20
wrapper  |   Copyright (C) 1999-2013 Tanuki Software, Ltd. All Rights Reserved.
wrapper  |     http://wrapper.tanukisoftware.com
wrapper  | 
wrapper  | Launching a JVM...
jvm 1    | g21121
jvm 1    | http://286.iteye.com/
jvm 1    | WrapperManager: Initializing...
jvm 1    | g21121
jvm 1    | http://286.iteye.com/
jvm 1    | hello world!
jvm 1    | stop(0)
wrapper  | <-- Wrapper Stopped

 

 

        4.Wrapper 日志配置

# 是否显示debug日志
wrapper.debug=TRUE

# 控制台信息输出格式
wrapper.console.format=PM

# 控制台日志级别
wrapper.console.loglevel=INFO

# 日志文件位置及名称
wrapper.logfile=../logs/wrapper.log

# 日志文件输出格式
wrapper.logfile.format=LPTM

# 日志文件日志级别
wrapper.logfile.loglevel=INFO

# 限制日志文件大小,0为不限制,参数:k,m,g等
wrapper.logfile.maxsize=10m

# 限制最大日志文件数,0为不限制
wrapper.logfile.maxfiles=0

# syslog 日志级别
wrapper.syslog.loglevel=NONE

 

 

        5.Wrapper 基本属性配置

# 允许使用非连续编号的属性,例如:path的序号可以打乱
wrapper.ignore_sequence_gaps=TRUE

# 如果pid文件已经存在则不启动程序
wrapper.pidfile.strict=TRUE

# 控制台启动时显示的标题
wrapper.console.title=------------Wrapper Console------------

 

 

        6.Wrapper JVM 检查

# 检测JVM中的死锁线程(需要标准版Wrapper)
wrapper.check.deadlock=TRUE
#间隔,单位:秒
wrapper.check.deadlock.interval=10
#出现死锁时处理事件
wrapper.check.deadlock.action=RESTART
#信息输出级别,FULL:全部;SIMPLE:精简;NONE:无;
wrapper.check.deadlock.output=FULL

 

        以下为wrapper.check.deadlock.action的事件类型: 
DEBUG :
    will cause a debug message to be logged. This is only really useful in helping to understand when the action is fired.
DUMP :
    will invoke a thread dump.
GC (Since ver. 3.5.7) :
    will invoke a full garbage collection sweep in the JVM. Be aware that doing this frequently can affect performance of the JVM as a full sweep will often cause all threads to freeze for the duration of the GC.
RESTART :
    will stop the current JVM and then restart a new invocation.
SHUTDOWN :
    will stop the JVM as well as the Wrapper.
USER_<n> (Professional Edition) :
    will cause a user defined event to be fired. This can be either the sending of an email, or the execution of an external system command. The command could be anything from performing clean up operations to raising an SNMP trap.
PAUSE :
    will pause the Java application if pausing is enabled and the JVM is running. See the wrapper.pausable property for details.
RESUME :
    will resume the Java application if it is in a paused state. This could be used if the JVM is not stopped when paused. See the wrapper.pausable property for details.
SUCCESS (Since ver. 3.5.5) :
    will tell the Wrapper to reset its internal failed invocation count and count the current JVM invocation as "successful". This is probably not useful in this context, but here for consistency with other properties.
NONE :
 
 
        7.内存溢出检测
# 内存溢出检测,Wrapper提供了几种不同的匹配机制
wrapper.filter.trigger.999=wrapper.filter.trigger.*java.lang.OutOfMemoryError
wrapper.filter.allow_wildcards.999=TRUE
wrapper.filter.action.999=NONE
wrapper.filter.trigger.1000=[Loaded java.lang.OutOfMemoryError
wrapper.filter.action.1000=NONE
wrapper.filter.trigger.1001=java.lang.OutOfMemoryError
#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.
 
 
        8.Wrapper Email 通知设置(需要专业版Wrapper)
# 邮件基本信息设置
wrapper.event.default.email.debug=TRUE
#smtp服务器地址
wrapper.event.default.email.smtp.host=
#smtp服务器端口
wrapper.event.default.email.smtp.port=25
#邮件主题
wrapper.event.default.email.subject=[%WRAPPER_HOSTNAME%:%WRAPPER_NAME%:%WRAPPER_EVENT_NAME%] Event Notification
#发件人地址
wrapper.event.default.email.sender=<Sender email>
#收件人地址
wrapper.event.default.email.recipient=<Recipient email>
# 指定文件内容
wrapper.event.jvm_restart.email.body=The JVM was restarted.\n\nPlease check on its status.\n
 
# 邮件日志相关配置
wrapper.event.default.email.attach_log=TRUE
wrapper.event.default.email.maillog.lines=50
wrapper.event.default.email.maillog.format=LPTM
wrapper.event.default.email.maillog.loglevel=INFO
 
# 触发事件,即当以下事件为true时发送邮件
wrapper.event.wrapper_start.email=TRUE
wrapper.event.jvm_prelaunch.email=TRUE
wrapper.event.jvm_start.email=TRUE
wrapper.event.jvm_started.email=TRUE
wrapper.event.jvm_deadlock.email=TRUE
wrapper.event.jvm_stop.email=TRUE
wrapper.event.jvm_stopped.email=TRUE
wrapper.event.jvm_restart.email=TRUE
wrapper.event.jvm_failed_invocation.email=TRUE
wrapper.event.jvm_max_failed_invocations.email=TRUE
wrapper.event.jvm_kill.email=TRUE
wrapper.event.jvm_killed.email=TRUE
wrapper.event.jvm_unexpected_exit.email=TRUE
wrapper.event.wrapper_stop.email=TRUE
 

        以上是对wrapper.conf配置文件主要属性的介绍,Wrapper更多特性及应用还需要自己去结合文档深入学习,以下是Wrapper官网文档地址: 
        http://wrapper.tanukisoftware.com/doc/english/properties.html

分享到:
评论

相关推荐

    proxool连接池配置详解

    ### Proxool连接池配置详解 #### 一、概述 Proxool是一个开源的轻量级Java数据库连接池实现,其主要目标是替代常见的数据库连接池解决方案,如C3P0或DBCP,并且提供了更加灵活和易于配置的特性。在实际应用中,...

    spring框架,技术详解及使用指导

    ### Spring框架技术详解及使用指导 #### Spring框架概述 Spring框架是一个开源的轻量级Java应用框架,由Rod Johnson创建并由Pivotal Software维护。它最初被设计为解决企业级应用开发中常见的问题,例如复杂的配置...

    spring框架,技术详解及使用指导.pdf

    ### Spring框架技术详解及使用指导 #### Spring框架简介 Spring框架是一个开源的轻量级Java应用框架,由Rod Johnson创建并由Pivotal Software维护。它最初被设计为解决企业级应用开发中常见的问题,例如复杂的配置...

    详解Keepalived安装与配置

    【详解Keepalived安装与配置】 Keepalived是一款开源的网络守护进程,它实现了VRRP(Virtual Router Redundancy Protocol)协议,主要用于提供高可用性(High Availability)和负载均衡(Load Balancing)功能。它...

    Dalsa相机使用说明_wrapper.pdf

    《Dalsa相机使用详解》 在图像处理领域,Dalsa相机以其卓越的性能和稳定性备受赞誉。本使用说明将深入探讨Dalsa线阵相机的硬件配置、软件设置以及SDK开发,帮助用户更好地理解和操作这款设备。 一、硬件部分 1.1 ...

    Rexx/Wrapper-开源

    **Rexx/Wrapper 开源项目详解** Rexx/Wrapper 是一个独特的开源工具,它为Rexx(一个高级过程式编程语言)程序提供了一种便捷的包装方式。通过这个工具,开发者能够将Rexx程序转换为SAA API(System Application ...

    de-wrapper-scripts:用于包装在 DE 中发布的应用程序的 Perl 脚本

    **标题详解:** "de-wrapper-scripts" 是一个用于在 Desktop Environment (DE) 中封装和管理应用程序的 Perl 脚本集。这里的 "DE" 指的是桌面环境,如 GNOME、KDE、XFCE 等,它们为用户提供了一个图形化的用户界面...

    spring技术详解

    2. **配置Bean**:使用XML文件或Java配置类来设置Bean的属性及依赖关系。 3. **获取Bean实例**:通过Spring IoC容器(如BeanFactory或ApplicationContext)来获取Bean实例。 4. **使用Bean**:调用Bean的方法或属性...

    TCPIP协议详解(4-1)

    WINS 55 7.1 NetBIOS 55 7.2 NetBIOS名字解析 57 7.3 动态NetBIOS名字解析 58 7.3.1 使用WINS的优点 58 7.3.2 WINS如何工作 59 7.3.3 配置WINS客户机 60 7.3.4 为代理配置WINS 60 7.3.5 ...

    TCP/IP详解

    22.6.1 安装及配置PPTP 240 22.6.2 建立PPTP连接 240 22.7 Windows 98拨号服务器 241 22.8 解决拨号网络连接中的问题 242 22.8.1 确认DUN配置 242 22.8.2 PPP日志 243 22.9 小结 243 第23章 Windows NT 4.0 244 23.1...

    ACE指南 ACE程序员教程 ACE论文集 ACE应用实例

    ### ACE自适配通信环境详解 #### 一、概述 ACE (Adaptive Communication Environment) 是一个开源、免费的面向对象框架,旨在简化并发通信软件的开发。它为开发者提供了丰富的可重用C++包装外观(wrapper facade)和...

    Python:Python高级特性:装饰器与迭代器

    ### Python高级特性详解:装饰器与迭代器 #### 一、装饰器 ##### 1.1 装饰器的概念 装饰器是Python语言中一项非常强大的特性,它允许开发者在不修改原始函数代码的基础上,为其添加新的功能或行为。简而言之,...

    An API wrapper for Discord written in Python..zip

    《Python实现的Discord API封装库——discord.py详解》 在现代互联网开发中,实时通讯平台成为了不可或缺的一部分,其中Discord以其丰富的功能和强大的社区支持,深受开发者和用户喜爱。为了方便开发者通过编程方式...

    tomcat开发技术

    ### Tomcat开发技术详解 #### 一、Tomcat简介 Apache Tomcat是一款开源的Servlet容器,它能够实现对Servlet和JavaServer Pages (JSP)的支持。Tomcat以其简单易用、稳定性高、性能良好等特点而受到广泛欢迎。作为...

    AndroidAppCodeFramework-master.rar

    3. `gradle-wrapper.properties`:Gradle wrapper配置文件,用于指定Gradle版本和下载路径。 4. `settings.gradle`:定义了项目中的所有模块。 5. `libs`:存放第三方库的jar或aar文件。 6. `modules`:可能包含可...

    android studio的配置

    ### Android Studio配置详解 在开发Android应用的过程中,正确配置Android Studio是至关重要的第一步。本文将详细介绍如何进行Android Studio的基本配置,并特别关注如何集成Weex框架,以便开发者能够更高效地进行...

    Spring开发指南

    - **Bean Factory**:是最基本的容器,负责实例化、定位及配置应用程序中的对象。 - **ApplicationContext**:扩展自Bean Factory,提供更多的配置功能,比如国际化支持、资源加载以及事件传播等。 - **Web ...

Global site tag (gtag.js) - Google Analytics