Java魔法堂:以Windows服务的形式运行Java程序

简介:

一、前言                            

  由于防止维护人员误操作关闭Java控制台程序,因此决定将其改造为以Windows服务的形式运行。弄了一个上午总算搞定了,下面记录下来,以供日后查阅。

 

二、Java Service Wrapper                  

  官网地址:http://wrapper.tanukisoftware.com/doc/english/download.jsp

  JavaServiceWrapper以守护进程或windows服务的方式运行java程序。JSW提供四种方案改造原有项目,以实现守护进程或windows服务的方式运行。而且还提供JVM监控功能和自动重启功能,反正十分强大的样子。

  方式1:WrapperSimpleApp

  用于通过同一个类实现启动和关闭的程序。
官方推荐使用该方式加工原有项目,好处是简单,且不用修改原有项目的代码。

  步骤1:下载并解压得到工具包,目录结构如下    

    /
|-- bin,wrapper控制windows服务的bat文件
|-- conf,wrapper配置文件
|-- doc,教程
|-- lib,wrapper的依赖包
|-- logs,日志
|-- src,模板
|-- conf
|-- bin

      步骤2:搭建项目结构:新建项目发布目录(假设为agent),然后将src下的conf和bin复制到agent下,并且将conf和bin下的文件重命名,去掉`.in`后缀。然后将bin/wrapper.exe复制到agent/bin/下,再将lib复制到agent下,得到目录结构如下

    agent
|-- lib
  |-- wrapper.dll
|-- wrapper.jar
  |-- conf
    |-- wrapper.conf
  |-- bin
|-- wrapper.exe
|-- 一堆bat文件
最后将原有项目的文件复制到bin目录下。

      步骤3:配置agent/conf/wrapper.conf的参数

复制代码
# 配置java命令路径
wrapper.java.command=jre/bin/java

# 配置CLASSPATH路径(并不会修改全局的环境变量)
# 若原有项目还依赖其他jar包,均需要添加进来
wrapper.java.classpath.1=../lib/wrapper.jar
wrapper.java.classpath.2=.

# 配置lib路径
wrapper.java.library.path.1=../lib

# 配置服务的main class(就是原有项目的程序入口类)
wrapper.app.parameter.1=agent.Daemon

# 配置wrapper日志文件
wrapper.logfile=logs/Agent.log

# 配置系统服务名称
wrapper.ntservice.name=AgentService

# 配置系统服务显示的名称
wrapper.ntservice.displayname=AgentService

# 配置系统服务描述
wrapper.ntservice.description=AgentService

# 配置系统服务的启动方式,取值范围是AUTO_START或DEMAND_START
wrapper.ntservice.starttype=AUTO_START

# 配置内存溢出则重启服务
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.
复制代码

      步骤4:安装、卸载服务

           点击对应的Install.bat和Uninstall.bat即可。

  2. 方式2:WrapperStartStopApp

  用于像tomcat那样,启动程序和关闭程序是分开的项目。该方式同样不用修改原来项目的代码。

  3. 方式3:WrapperListener

  该方式需要修改原来项目的代码,但最灵活。

  4. 方式4:WrapperJarApp

  用于原有项目已经打包为jar或war包的情况,配置方式与`WrapperSimpleApp`相似,但`wrapper.app.parameter.1=jar或war包路径`。该方式同样不用修改原来项目的代码

 

三、总结                                

    官方文档以JBOSS为例子说明WrapperSimpleApp的使用,十分不好懂,幸好有前人记录实操过程我才从苦海得救,感谢感谢。

    尊重原创,转载请注明来自:http://www.cnblogs.com/fsjohnhuang/p/4019267.html  ^_^肥仔John

 

四、参考                                

http://blog.csdn.net/arjick/article/details/4526392

如果您觉得本文的内容有趣就扫一下吧!捐赠互勉!


本文转自^_^肥仔John博客园博客,原文链接:http://www.cnblogs.com/fsjohnhuang/p/4019267.html,如需转载请自行联系原作者

相关文章
|
2月前
|
Java 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
利用java8 的 CompletableFuture 优化 Flink 程序
|
1月前
|
IDE Java 编译器
开发 Java 程序一定要安装 JDK 吗
开发Java程序通常需要安装JDK(Java Development Kit),因为它包含了编译、运行和调试Java程序所需的各种工具和环境。不过,某些集成开发环境(IDE)可能内置了JDK,或可使用在线Java编辑器,无需单独安装。
72 1
|
27天前
|
SQL 安全 Java
Java 异常处理:筑牢程序稳定性的 “安全网”
本文深入探讨Java异常处理,涵盖异常的基础分类、处理机制及最佳实践。从`Error`与`Exception`的区分,到`try-catch-finally`和`throws`的运用,再到自定义异常的设计,全面解析如何有效管理程序中的异常情况,提升代码的健壮性和可维护性。通过实例代码,帮助开发者掌握异常处理技巧,确保程序稳定运行。
40 0
|
2月前
|
分布式计算 大数据 Java
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
42 1
大数据-86 Spark 集群 WordCount 用 Scala & Java 调用Spark 编译并打包上传运行 梦开始的地方
|
2月前
|
IDE Java 编译器
Java:如何确定编译和运行时类路径是否一致
类路径(Classpath)是JVM用于查找类文件的路径列表,对编译和运行Java程序至关重要。编译时通过`javac -classpath`指定,运行时通过`java -classpath`指定。IDE如Eclipse和IntelliJ IDEA也提供界面管理类路径。确保编译和运行时类路径一致,特别是外部库和项目内部类的路径设置。
195 5
|
2月前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
229 2
|
2月前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
159 1
|
2月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
75 1
|
2月前
|
前端开发 Java API
JAVA Web 服务及底层框架原理
【10月更文挑战第1天】Java Web 服务是基于 Java 编程语言用于开发分布式网络应用程序的一种技术。它通常运行在 Web 服务器上,并通过 HTTP 协议与客户端进行通信。
44 1
|
2月前
|
Java 数据库
基于java的汽车服务管理系统(Car Service Management System)
基于java的汽车服务管理系统(Car Service Management System)
28 0