Spring Boot 应用程序能够在 Eclipse 环境中启动,但不能在带有快照的 Windows 命令行中运行

Posted

技术标签:

【中文标题】Spring Boot 应用程序能够在 Eclipse 环境中启动,但不能在带有快照的 Windows 命令行中运行【英文标题】:Spring boot app able launch in eclipse environment but not when run in windows command line with snapshot 【发布时间】:2020-02-05 01:18:20 【问题描述】:

我目前正在尝试实现 tlsv1.2 支持的 Spring Boot 应用程序。能够使用eclipse ide启动spring boot应用程序,但是如果我生成快照并尝试执行它,它将不会启动

Spring boot 快照版本:2.1.10.BUILD-SNAPSHOT 命令运行:java -jar <somesample-snapshot>

但是端口不忙或者所有需要的keystoretruststore都存在

这是application.yml的配置

server:
  port: 8449
  ssl:
    key-store: classpath:keystore.jks
    key-store-password: allpassword
    trust-store: classpath:truststore.jks
    trust-store-password: allpassword
    client-auth: need
    enabled: true
    protocol: TLS
    enabled-protocols: TLSv1.2

org.apache.catalina.LifecycleException:协议处理程序启动失败 在 org.apache.catalina.connector.Connector.startInternal(Connector.java:1008) ~[tomcat-embed-core-9.0.26.jar!/:9.0.26] 在 org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183) ~[tomcat-embed-core-9.0.26.jar!/:9.0.26] 在 org.apache.catalina.core.StandardService.addConnector(StandardService.java:227) [tomcat-embed-core-9.0.26.jar!/:9.0.26] 在 org.springframework.boot.web.embedded.tomcat.TomcatWebServer.addPreviousRemovedConnectors(TomcatWebServer.java:263) [spring-boot-2.1.10.BUILD-SNAPSHOT.jar!/:2.1.10.BUILD-SNAPSHOT] 在 org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:195) [spring-boot-2.1.10.BUILD-SNAPSHOT.jar!/:2.1.10.BUILD-SNAPSHOT] 在 org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.startWebServer(ServletWebServerApplicationContext.java:297) [spring-boot-2.1.10.BUILD-SNAPSHOT.jar!/:2.1.10.BUILD-SNAPSHOT] 在 org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:163) [spring-boot-2.1.10.BUILD-SNAPSHOT.jar!/:2.1.10.BUILD-SNAPSHOT] 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:552) [spring-context-5.1.10.RELEASE.jar!/:5.1.10.RELEASE] 在 org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) [spring-boot-2.1.10.BUILD-SNAPSHOT.jar!/:2.1.10.BUILD-SNAPSHOT] 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744) [spring-boot-2.1.10.BUILD-SNAPSHOT.jar!/:2.1.10.BUILD-SNAPSHOT] 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391) [spring-boot-2.1.10.BUILD-SNAPSHOT.jar!/:2.1.10.BUILD-SNAPSHOT] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:312) [spring-boot-2.1.10.BUILD-SNAPSHOT.jar!/:2.1.10.BUILD-SNAPSHOT] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.1.10.BUILD-SNAPSHOT.jar!/:2.1.10.BUILD-SNAPSHOT] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1204) [spring-boot-2.1.10.BUILD-SNAPSHOT.jar!/:2.1.10.BUILD-SNAPSHOT] 在 com.ibm.RoAlliesApplication.main(RoAlliesApplication.java:10) [课程!/:1.0-SNAPSHOT] 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_221] 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_221] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_221] 在 java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_221] 在 org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [ro-allies-1.0-SNAPSHOT.jar:1.0-SNAPSHOT] 在 org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [ro-allies-1.0-SNAPSHOT.jar:1.0-SNAPSHOT] 在 org.springframework.boot.loader.Launcher.launch(Launcher.java:51) [ro-allies-1.0-SNAPSHOT.jar:1.0-SNAPSHOT] 在 org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52) [ro-allies-1.0-SNAPSHOT.jar:1.0-SNAPSHOT] 原因: java.lang.IllegalArgumentException:流已关闭 在 org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:99) ~[tomcat-embed-core-9.0.26.jar!/:9.0.26] 在 org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:71) ~[tomcat-embed-core-9.0.26.jar!/:9.0.26] 在 org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:218) ~[tomcat-embed-core-9.0.26.jar!/:9.0.26] 在 org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1124) ~[tomcat-embed-core-9.0.26.jar!/:9.0.26] 在 org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:1210) ~[tomcat-embed-core-9.0.26.jar!/:9.0.26] 在 org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:585) ~[tomcat-embed-core-9.0.26.jar!/:9.0.26] 在 org.apache.catalina.connector.Connector.startInternal(Connector.java:1005) ~[tomcat-embed-core-9.0.26.jar!/:9.0.26] ...省略了 22 个常见帧 原因:java.io.IOException: Stream closed 在 java.util.zip.InflaterInputStream.ensureOpen(InflaterInputStream.java:67) ~[na:1.8.0_221] 在 java.util.zip.InflaterInputStream.read(InflaterInputStream.java:142) ~[na:1.8.0_221] 在 org.springframework.boot.loader.jar.ZipInflaterInputStream.read(ZipInflaterInputStream.java:52) ~[ro-allies-1.0-SNAPSHOT.jar:1.0-SNAPSHOT] 在 java.io.BufferedInputStream.fill(BufferedInputStream.java:246) ~[na:1.8.0_221] 在 java.io.BufferedInputStream.read(BufferedInputStream.java:265) ~[na:1.8.0_221] 在 java.security.DigestInputStream.read(DigestInputStream.java:124) ~[na:1.8.0_221] 在 java.io.DataInputStream.readInt(DataInputStream.java:387) ~[na:1.8.0_221] 在 sun.security.provider.JavaKeyStore.engineLoad(JavaKeyStore.java:658) ~[na:1.8.0_221] 在 sun.security.provider.JavaKeyStore$JKS.engineLoad(JavaKeyStore.java:56) ~[na:1.8.0_221] 在 sun.security.provider.KeyStoreDelegator.engineLoad(KeyStoreDelegator.java:224) ~[na:1.8.0_221] 在 sun.security.provider.JavaKeyStore$DualFormatJKS.engineLoad(JavaKeyStore.java:70) ~[na:1.8.0_221] 在 java.security.KeyStore.load(KeyStore.java:1445) ~[na:1.8.0_221] 在 org.apache.tomcat.util.security.KeyStoreUtil.load(KeyStoreUtil.java:69) ~[tomcat-embed-core-9.0.26.jar!/:9.0.26] 在 org.apache.tomcat.util.net.SSLUtilBase.getStore(SSLUtilBase.java:217) ~[tomcat-embed-core-9.0.26.jar!/:9.0.26] 在 org.apache.tomcat.util.net.SSLHostConfigCertificate.getCertificateKeystore(SSLHostConfigCertificate.java:206) ~[tomcat-embed-core-9.0.26.jar!/:9.0.26] 在 org.apache.tomcat.util.net.SSLUtilBase.getKeyManagers(SSLUtilBase.java:283) ~[tomcat-embed-core-9.0.26.jar!/:9.0.26] 在 org.apache.tomcat.util.net.SSLUtilBase.createSSLContext(SSLUtilBase.java:247) ~[tomcat-embed-core-9.0.26.jar!/:9.0.26] 在 org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:97) ~[tomcat-embed-core-9.0.26.jar!/:9.0.26] ...省略了28个常用框架

2019-10-07 23:28:42.800 信息 3716 --- [主要] o.apache.catalina.core.StandardService :停止服务 [Tomcat] 2019-10-07 23:28:42.824 信息 3716 --- [主要] ConditionEvaluationReportLoggingListener:

启动 ApplicationContext 时出错。显示条件报告 在启用“调试”的情况下重新运行您的应用程序。 2019-10-07 23:28:42.828 错误 3716 --- [主要] o.s.b.d.LoggingFailureAnalysisReporter:

***************************应用程序启动失败


说明:

配置为侦听端口 8449 的 Tomcat 连接器失败 开始。端口可能已在使用中,或者连接器可能已使用 配置错误。

行动:

验证连接器的配置,识别并停止任何进程 正在侦听端口 8449,或配置此应用程序以侦听 在另一个端口上。

2019-10-07 23:28:42.836 信息 3716 --- [主要] osss.concurrent.ThreadPoolTask​​Executor :关闭 ExecutorService 'applicationTaskExecutor'

【问题讨论】:

看到这个答案***.com/a/58198805/6414086 【参考方案1】:

我在 tomcat 9.0.30 下面添加了依赖项,它对我有用。

 <dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-annotations-api</artifactId>
    <version>9.0.30</version>
  </dependency>
  <dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-jdbc</artifactId>
    <version>9.0.30</version>
  </dependency>
  <dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-jsp-api</artifactId>
    <version>9.0.30</version>
  </dependency>
  <dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-core</artifactId>
    <version>9.0.30</version>
  </dependency>
  <dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-el</artifactId>
    <version>9.0.30</version>
  </dependency>
  <dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <version>9.0.30</version>
  </dependency>
  <dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-websocket</artifactId>
    <version>9.0.30</version>
  </dependency>

【讨论】:

【参考方案2】:

看起来像 ZipInflaterInputStream 解压缩和堆栈跟踪中的问题尚不清楚,但使其在命令行上运行的解决方法

jar xf 然后执行

java org.springframework.boot.loader.JarLauncher

【讨论】:

以上是关于Spring Boot 应用程序能够在 Eclipse 环境中启动,但不能在带有快照的 Windows 命令行中运行的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 应用程序能够在 Eclipse 环境中启动,但不能在带有快照的 Windows 命令行中运行

如何在 Eclipse 本身中运行 Spring Boot Web 应用程序?

如何将 spring-boot 作为客户端应用程序运行?

Spring Boot 环境特定的配置

如何构建spring boot

spring cloud:spring boot技术总结