【发布时间】:2014-07-30 05:12:04
【问题描述】:
我正在尝试用 procrun 包装弹簧靴“uber JAR”。
按预期运行以下工作:
java -jar my.jar
我需要我的 spring boot jar 在 Windows 启动时自动启动。最好的解决方案是将 jar 作为服务运行(与独立的 tomcat 相同)。
当我尝试运行它时,我收到“Commons Daemon procrun failed with exit value: 3”
查看 spring-boot 源,它看起来好像使用了自定义类加载器:
在尝试直接运行我的 main 方法时,我也会收到“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 执行器关闭 JMX Bean。
当我现在停止服务时会发生什么; windows无法停止服务(但将其标记为已停止),服务仍在运行(我可以浏览到本地主机),任务管理器中没有提到该进程(不是很好!除非我是盲人)。
【问题讨论】:
-
Spring Boot 需要自定义类加载器,因为它指定了 Spring Boot jar 格式的构建(即包括嵌套的 jar)。所以不,你需要以某种方式执行
java -jar my.jar来启动服务。在 Windows 上时,您始终可以使用批处理文件来启动服务……请参阅 stackoverflow.com/questions/415409/… -
我怀疑是这样的。我原本以为 spring boot 只是使用了 maven shade 插件。我将按照您的链接中的建议调查 RunAsService
-
在您可能想尝试的线程中有更多建议。 NSSM 看起来很有希望。
-
希望我提到的解决方案对您有用,我也经历过同样的事情,并且能够轻松完成此设置,并且已经有一段时间没有问题了。
-
这可以使用 Spring 1.3 docs.spring.io/spring-boot/docs/1.3.x/reference/htmlsingle/…
标签: spring-boot procrun