ide*_*tor 216 java windows-services
我刚刚继承了一个需要在XP和Vista上作为服务安装的java应用程序.自从我以任何形式使用Windows以来已经过去了大约8年,我从来没有创建过服务,更不用说像java应用程序这样的东西(我有一个应用程序jar和一个依赖jar - log4j ).将此作为服务运行所需的魔力是什么?我有源代码,因此可以进行代码修改,但最好是避免代码修改.
mcd*_*don 98
Apache Commons Daemon是一个不错的选择.它Procrun为Windows服务,并JSVC用于UNIX守护进程.它使用限制较少的Apache许可证,Apache Tomcat将其作为自身的一部分在Windows和Linux上运行!要使其工作有点棘手,但有一篇详尽的文章与工作示例.
除此之外,您可以查看Apache Tomcat中的bin\service.bat以了解如何设置服务.在Tomcat中,他们重命名Procrun二进制文件(prunsrv.exe - > tomcat6.exe,prunmgr.exe - > tomcat6w.exe).
我在使用Procrun时遇到的困难,你的start和stop方法必须接受参数(String [] argv).例如"start(String [] argv)"和"stop(String [] argv)"可以工作,但"start()"和"stop()"会导致错误.如果您无法修改这些调用,请考虑创建一个可以按摩这些调用以满足您需求的引导程序类.
sbl*_*ndy 67
111*_*01b 56
使用Apache Commons Daemon,您现在可以拥有自定义的可执行文件名称和图标! 您还可以使用自己的名称和图标获得自定义Windows托盘监视器!
我现在使用自己的名称和图标(prunsrv.exe)运行我的服务,系统托盘监视器(prunmgr.exe)也有我自己的自定义名称和图标!
MyServiceName.exe和MyServiceNamew.exe.下载WinRun4J并使用RCEDIT.exe它附带的程序修改Apache可执行文件以嵌入您自己的自定义图标,如下所示:
> RCEDIT.exe /I MyServiceName.exe customIcon.ico
> RCEDIT.exe /I MyServiceNamew.exe customTrayIcon.ico
Run Code Online (Sandbox Code Playgroud)现在安装这样的Windows服务(有关更多详细信息和选项,请参阅文档):
> MyServiceName.exe //IS//MyServiceName \
--Install="C:\path-to\MyServiceName.exe" \
--Jvm=auto --Startup=auto --StartMode=jvm \
--Classpath="C:\path-to\MyJarWithClassWithMainMethod.jar" \
--StartClass=com.mydomain.MyClassWithMainMethod
Run Code Online (Sandbox Code Playgroud)现在你有一个Jar的Windows服务,它将使用你自己的图标和名称运行!您还可以启动监视文件,它将使用您自己的图标和名称在系统托盘中运行.
Gio*_*tro 29
一个简单的方法是NSSM Wrapper Wrapper(参见我的博客文章).
Pet*_*ith 26
另一个选择是WinRun4J.这是一个可配置的java启动程序,可兼作Windows服务主机(32位和64位版本).它是开源的,对其使用没有限制.
(完全披露:我在这个项目上工作).
ato*_*les 17
另一个答案是Yet Another Service Service Wrapper,这似乎是Java Service Wrapper的一个很好的替代品,因为它有更好的许可.它也很容易从JSW转移到YAJSW.当然,对于我来说,Windows服务器是全新的,并且试图将Java应用程序作为服务运行,它非常容易使用.
我找到的其他一些,但最终没有使用:
我认为Java Service Wrapper运行良好.请注意,有三种方法可以集成您的应用程序.听起来选项1最适合您,因为您不想更改代码.配置文件可能会有点疯狂,但请记住(对于选项1)您正在启动的程序以及您将为其指定参数的程序是他们的帮助程序,然后它将启动您的程序.他们有一个示例配置文件.
小智 5
如果您使用Gradle Build Tool,则可以尝试使用Windows-service-plugin,它有助于使用Apache Commons Daemon Procrun。
要使用插件创建Java Windows Service应用程序,您需要执行几个简单的步骤。
使用适当的方法创建一个主服务类。
public class MyService {
public static void main(String[] args) {
String command = "start";
if (args.length > 0) {
command = args[0];
}
if ("start".equals(command)) {
// process service start function
} else {
// process service stop function
}
}
}
Run Code Online (Sandbox Code Playgroud)将插件包含到您的build.gradle文件中。
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "gradle.plugin.com.github.alexeylisyutenko:windows-service-plugin:1.1.0"
}
}
apply plugin: "com.github.alexeylisyutenko.windows-service-plugin"
Run Code Online (Sandbox Code Playgroud)
用于Gradle 2.1中引入的新的,可孵化的插件机制的相同脚本片段:
plugins {
id "com.github.alexeylisyutenko.windows-service-plugin" version "1.1.0"
}
Run Code Online (Sandbox Code Playgroud)配置插件。
windowsService {
architecture = 'amd64'
displayName = 'TestService'
description = 'Service generated with using gradle plugin'
startClass = 'MyService'
startMethod = 'main'
startParams = 'start'
stopClass = 'MyService'
stopMethod = 'main'
stopParams = 'stop'
startup = 'auto'
}
Run Code Online (Sandbox Code Playgroud)运行createWindowsService gradle任务以创建Windows服务分发。
这就是创建简单的Windows服务所需要做的。该插件将自动下载Apache Commons Daemon Procrun二进制文件,将此二进制文件解压缩到服务分发目录,并创建用于安装/卸载服务的批处理文件。
在${project.buildDir}/windows-service目录中,您将找到服务可执行文件,用于安装/卸载服务的批处理脚本以及所有运行时库。要安装服务运行,<project-name>-install.bat以及是否要卸载服务运行<project-name>-uninstall.bat。要启动和停止服务,请使用<project-name>w.exe可执行文件。
请注意,方法处理服务启动应创建并启动一个单独的线程来执行处理,然后返回。启动和停止服务时,从不同的线程调用main方法。
有关更多信息,请阅读有关插件和Apache Commons Daemon Procrun的信息。
| 归档时间: |
|
| 查看次数: |
278448 次 |
| 最近记录: |