java wrapper window service简介与使用
分类:软件编程
阅读:179
作者:马晶晶
发布:2016-12-02 09:12:24

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
  1. #指定java的jdk运行环境
  2. wrapper.java.command=./java/1.7/jdk/bin/java
  3. #指定程序的主启动类
  4. wrapper.java.mainclass=Main
  5. #指定需要依赖的jar包
  6. wrapper.java.classpath.1=./wrapper.jar
  7. wrapper.java.classpath.2=./lib/commons-io-2.4.jar
  8. wrapper.java.classpath.3=./lib/log4j-1.2.17.jar
  9. wrapper.java.classpath.5=.
  10. #指定启动参数(main方法的args[])
  11. wrapper.app.parameter.1=1
  12. #加入到window服务中的一些配置
  13. # Name of the service
  14. wrapper.name=huangtaiji
  15. # Display name of the service
  16. wrapper.displayname=huangtaiji Wrapper Sample Application
  17. # Description of the service
  18. wrapper.description=huangtaiji
  19. # Service dependencies. Add dependencies as needed starting from 1
  20. wrapper.ntservice.dependency.1=
  21. # Mode in which the service is installed. AUTO_START, DELAY_START or DEMAND_START
  22. wrapper.ntservice.starttype=AUTO_START
  23. # Allow the service to interact with the desktop.
  24. wrapper.ntservice.interactive=false

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

自己的程序编写

Main.java程序

  1. import org.tanukisoftware.wrapper.WrapperListener;
  2. import org.tanukisoftware.wrapper.WrapperManager;
  3. public class Main implements WrapperListener{
  4. public static void main(String[] args) throws Exception{
  5. HuangTaiJi.main(args);
  6. WrapperManager.start(new Main(),args);
  7. }
  8. public Integer start(String[] args) {
  9. System.out.println("start()");
  10. return null;
  11. }
  12. public int stop(int exitCode) {
  13. System.out.println("stop(" + exitCode + ")");
  14. return exitCode;
  15. }
  16. public void controlEvent(int event) {
  17. System.out.println("controlEvent(" + event + ")");
  18. }
  19. }

HuangTaiJi.java

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

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