gpt4 book ai didi

spring-boot - Spring Boot JAR 作为 Windows 服务

转载 作者:行者123 更新时间:2023-12-03 14:07:35 27 4
gpt4 key购买 nike

我正在尝试用 procrun 包装 Spring Boot “uber JAR”。

按预期运行以下工作:

java -jar my.jar



我需要我的 spring boot jar 在 Windows 启动时自动启动。最好的解决方案是将 jar 作为服务运行(与独立的 tomcat 相同)。

当我尝试运行它时,我得到“Commons Daemon procrun failed with exit value: 3”

查看 spring-boot 源代码,它看起来好像使用了自定义类加载器:

https://github.com/spring-projects/spring-boot/blob/master/spring-boot-tools/spring-boot-loader/src/main/java/org/springframework/boot/loader/JarLauncher.java



尝试直接运行我的主要方法时,我也会收到“ClassNotFoundException”。

java -cp my.jar my.MainClass



有没有一种方法可以用来在 Spring Boot jar 中运行我的 main 方法(而不是通过 JarLauncher)?

有没有人成功地将 spring-boot 与 procrun 集成?

我知道 http://wrapper.tanukisoftware.com/ .但是由于他们的许可证,我不能使用它。

更新

我现在已经设法使用 procrun 启动服务。
set SERVICE_NAME=MyService
set BASE_DIR=C:\MyService\Path
set PR_INSTALL=%BASE_DIR%prunsrv.exe

REM Service log configuration
set PR_LOGPREFIX=%SERVICE_NAME%
set PR_LOGPATH=%BASE_DIR%
set PR_STDOUTPUT=%BASE_DIR%stdout.txt
set PR_STDERROR=%BASE_DIR%stderr.txt
set PR_LOGLEVEL=Error

REM Path to java installation
set PR_JVM=auto
set PR_CLASSPATH=%BASE_DIR%%SERVICE_NAME%.jar

REM Startup configuration
set PR_STARTUP=auto
set PR_STARTIMAGE=c:\Program Files\Java\jre7\bin\java.exe
set PR_STARTMODE=exe
set PR_STARTPARAMS=-jar#%PR_CLASSPATH%

REM Shutdown configuration
set PR_STOPMODE=java
set PR_STOPCLASS=TODO
set PR_STOPMETHOD=stop

REM JVM configuration
set PR_JVMMS=64
set PR_JVMMX=256

REM Install service
%PR_INSTALL% //IS//%SERVICE_NAME%

我现在只需要锻炼如何停止服务。我正在考虑对 spring-boot actuator 关闭 JMX Bean 做一些事情。

当我现在停止服务时会发生什么; windows无法停止服务(但将其标记为已停止),服务仍在运行(我可以浏览到本地主机),任务管理器中没有提到该进程(不是很好!除非我是盲人)。

最佳答案

远离winsw , 它是用 .NET 制作的,我在客户环境中遇到了很多关于过时 Windows 的问题。

我推荐NSSM ,它是使用纯 C 制作的,我在所有过时的 Windows 上都使用了它,没有任何问题。它具有相同的功能和更多...

这是 batch script (.bat)示例如何使用它:

rem Register the service
nssm install my-java-service "C:\Program Files\Java\jre1.8.0_152\bin\java.exe" "-jar" "snapshot.jar"
rem Set the service working dir
nssm set my-java-service AppDirectory "c:\path\to\jar-diretory"
rem Redirect sysout to file
nssm set my-java-service AppStdout "c:\path\to\jar-diretory\my-java-service.out"
rem Redirect syserr to file
nssm set my-java-service AppStderr "c:\path\to\jar-diretory\my-java-service.err"
rem Enable redirection files rotation
nssm set my-java-service AppRotateFiles 1
rem Rotate files while service is running
nssm set my-java-service AppRotateOnline 1
rem Rotate files when they reach 10MB
nssm set my-java-service AppRotateBytes 10485760
rem Stop service when my-java-service exits/stop
nssm set my-java-service AppExit Default Exit
rem Restart service when my-java-service exits with code 2 (self-update)
nssm set my-java-service AppExit 2 Restart
rem Set the display name for the service
nssm set my-java-service DisplayName "My JAVA Service"
rem Set the description for the service
nssm set my-java-service Description "Your Corp"
rem Remove old rotated files (older than 30 days)
nssm set my-java-service AppEvents Rotate/Pre "cmd /c forfiles /p \"c:\path\to\jar-diretory\" /s /m \"my-java-service-*.*\" /d -30 /c \"cmd /c del /q /f @path\""
rem Make a copy of my-java-service.jar to snapshot.jar to leave the original JAR unlocked (for self-update purposes)
nssm set my-java-service AppEvents Start/Pre "cmd /c copy /y \"c:\path\to\jar-diretory\my-java-service.jar\" \"c:\path\to\jar-diretory\snapshot.jar\""

关于spring-boot - Spring Boot JAR 作为 Windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24124062/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com