我试图按照here的说明运行我的Spring Boot Web服务作为Windows服务。如果我指向org.springframework.boot.loader.JarLauncher,那么我的网络服务就开始了。工作,但当我尝试指向我添加的Bootstrap类时,我得到一个" FindClass com / mycompany / Bootstrap失败"信息。所以prunsrv可以找到SpringBoot类,但不能找到我的类。
有什么建议吗?使用org.springframework.boot.loader.JarLauncher似乎可以正常启动Windows服务但是我无法正常停止服务,我必须在任务管理器中将其杀掉。
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\GMC_TLG_DEV\Parameters\Java]
"Jvm"="E:\\Java\\jre1.8.0_121_32\\bin\\client\\jvm.dll"
"Classpath"="E:\\Apache\\prunsvc\\myspringbootjar.jar"
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\GMC_TLG_DEV\Parameters\Start]
"Class"="org.springframework.boot.loader.JarLauncher"
"Mode"="jvm"
"Method"="main"
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Apache Software Foundation\Procrun 2.0\GMC_TLG_DEV\Parameters\Start]
"Class"="com.mycompany.Bootstrap"
"Mode"="jvm"
"Method"="start"
答案 0 :(得分:1)
我能够解决这个问题,所以即时发布解决方案。
问题是Spring Boot不再在正常的类路径上存储应用程序类。 Spring引导有自己的类加载器,可以加载应用程序类。为了将我的com.mycompany.Bootstrap类放在正确的位置,我将下面显示的ANT脚本添加到Maven构建中。这个脚本来自某处的帖子,但我不记得在哪里。
听起来Radu的解决方案也是合适的。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<phase>package</phase>
<configuration>
<target>
<zip destfile="${project.build.directory}/${project.build.finalName}.jar"
update="true" compress="store">
<fileset dir="${project.build.directory}/classes" >
<include name="com/mycompany/Bootstrap.class"/>
</fileset>
</zip>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
答案 1 :(得分:0)
我知道你的帖子已经很久了但我今天遇到了同样的问题。它可能与1.4.0以来Spring Boot中JAR文件的更改包装有关。
此处的说明适用于我的情况: https://github.com/spring-projects/spring-boot/issues/6792#issuecomment-243564648