java wrapper window service简介与使用

分类:软件编程
阅读:846
作者:majingjing
发布:2016-12-02 09:12

java-wrapper-service.zip 在实际开发过程中很多模块需要独立运行,他们并不会以web形式发布,传统的做法是将其压缩为jar包独立运行,这种形式简单易行也比较利于维护. 现在比较流行的微服务都是以jar包的方式来构建服务并发布的. 在linux环境是很好处理的,执行一个shell脚本,让其在后台运行时非常容易的.

但是在window环境时,就会出现很多问题:

  • bat批处理的脚本窗口很难隐藏掉
  • 但是一旦服务器重启或出现异常时,程序往往无法自行修复或重启。解决服务器重启的传统做法是编写一段shell脚本随服务器启动而运行,但是这样做只是治标,那么我们想寻求一种“治本”的方式该怎么办呢?

Java Service Wrapper就轻松而简单的为我们解决了这些问题。"Java Service Wrapper"顾名思义,将我们的Java程序包装成系统服务,这样就可以随着系统的运行而自动运行,当然Java Service Wrapper(下面简称Wrapper)的功能绝不仅于此。 Wrapper下载地址:点击调整到下载地址

注意事项: 在下载页面的提示语,之前没太在意,吃了大亏.Community 版本的windows x64位不支持 java-wrapper-service注意事项.png

推荐下载Professional版本,虽然是需要授权的,但是自己学习使用还是可以玩耍一下的.

好了下载完成之后

我们只需要几个核心的文件
  1. wrapper.jar 核心文件,位于lib文件夹中
  2. wrapper.exe 因为是在windows系统中运行所以需要。位于bin文件夹中
  3. wrapper.dll 因为是在windows系统中运行所以需要。 位于lib文件夹中
  4. wrapper.conf 核心配置文件,位于src/conf文件夹中,将后缀名conf.in改成conf
  5. App.bat (可选)运行你的程序,位于src/bin文件夹中, 将后缀名conf.in改成conf
  6. InstallApp-NT.bat (可选)将你的程序配置为系统服务,位于src/bin文件夹中, 将后缀名conf.in改成conf
  7. UninstallApp-NT.bat (可选)将你的程序从系统服务中删除,位于src/bin文件夹中, 将后缀名conf.in改成conf
  8. StartApp-NT.bat (可选)启动程序的系统服务,位于src/bin文件夹中, 将后缀名conf.in改成conf
  9. StopApp-NT.bat (可选)停止程序的系统服务,位于src/bin文件夹中, 将后缀名conf.in改成conf
  10. XXX.jar/XXX.class 你的程序
其他的没什么讲的,就说下重点需要修改的配置文件 wrapper.conf
#指定java的jdk运行环境
wrapper.java.command=./java/1.7/jdk/bin/java

#指定程序的主启动类
wrapper.java.mainclass=Main

#指定需要依赖的jar包
wrapper.java.classpath.1=./wrapper.jar
wrapper.java.classpath.2=./lib/commons-io-2.4.jar
wrapper.java.classpath.3=./lib/log4j-1.2.17.jar
wrapper.java.classpath.5=.

#指定启动参数(main方法的args[])
wrapper.app.parameter.1=1

#加入到window服务中的一些配置
# Name of the service
wrapper.name=huangtaiji
# Display name of the service
wrapper.displayname=huangtaiji Wrapper Sample Application
# Description of the service
wrapper.description=huangtaiji
# Service dependencies.  Add dependencies as needed starting from 1
wrapper.ntservice.dependency.1=
# Mode in which the service is installed.  AUTO_START, DELAY_START or DEMAND_START
wrapper.ntservice.starttype=AUTO_START
# Allow the service to interact with the desktop.
wrapper.ntservice.interactive=false

其中一些其他的配置都可以自定义修改, 以上配置基本够用了.

自己的程序编写

Main.java程序

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

public class Main implements WrapperListener{
	public static void main(String[] args) throws Exception{
		HuangTaiJi.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 + ")");
    }
}

HuangTaiJi.java

public class HuangTaiJi{
	public static void main(String[] args) throws Exception{
		System.out.println("start");
		System.out.println("OK");
		System.out.println("end");
	}
}
所有工作准备就绪,下面就是见证奇迹的时候
  • 双击执行InstallApp-NT.bat
  • 打开计算机的服务 找到 huangtaiji 服务 , 并启动该服务
  • 查看日志是否执行成功

附上我在实践中的例子: java-wrapper-service.zip 附上线上使用的例子: GMS-JOB