我正在尝试运行和测试已打包到zip文件中并已在Linux VM上解压缩的Spring Boot应用程序。 zip包含应用程序需要的所有内容(至少据我所知)。当我尝试执行该应用程序时,它启动但很快失败,因为它无法加载SSH / TLS安全通信所需的密钥库。
我的application.yml中包含以下内容:
server:
port: 8091
ssl:
enabled: true
protocol: TLS
trust-store-type: JKS
trust-store: classpath:keystore/server.keystore
trust-store-password: <hidden>
key-store-type: JKS
key-store: classpath:keystore/ra/server.keystore
key-store-password: <hidden>
测试系统上的目录结构如下:
[centos@route-assessor route-assessor]$ ls -R
.:
config elastic-apm-agent-1.10.0.jar lib run-route-assessor.sh services-0.0.1-SNAPSHOT.jar
./config:
application.yml keystore log4j2.xml
./config/keystore:
mp ra rg server.keystore
./config/keystore/mp:
server.keystore
./config/keystore/ra:
server.keystore
./config/keystore/rg:
server.keystore
./lib
<dependency jars>
这是抛出的异常:
[2019-10-23 13:21:31.419] main WARN : context.AnnotationConfigServletWebServerApplicationContext:557 - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Could not load key store 'classpath:keystore/server.keystore'
Spring Boot的“运行时”显然可以看到并访问config
目录,但似乎看不到其中包含的keystore
目录。我需要在application.yml中指定不同的路径,还是需要将密钥库文件放在其他位置?
注意:我可以使用Eclipse中配置的application.yml运行此应用程序,而不会出现任何问题。当然,针对这种情况,所有资源都位于src/main/resources
中。
更新:
按照@borban的建议,我对application.yml进行了如下修改:
key-store: file:config/keystore/ra/server.keystore
trust-store: file:config/keystore/server.keystore
这似乎已经解决了一个问题,但我还没有走出困境:
[2019-10-23 15:07:17.671] main ERROR: boot.SpringApplication:821 - Application run failed
org.springframework.boot.web.server.WebServerException: Unable to start embedded Jetty server
...
Caused by: java.lang.IllegalStateException: no valid keystore
...
据我所知,我的密钥库文件有效且正确(我在Windows开发工具箱中使用它们已有几个月了)。它们被复制为zip分发的一部分。可能有什么我想念的吗?
我也有点担心日志中的其他消息。我不确定它们是否相关,但是似乎它们可能是:
[2019-10-23 15:07:10.153] main WARN : resource.Resource:126 - java.lang.IllegalArgumentException: URI is not hierarchical
[2019-10-23 15:07:10.155] main WARN : resource.Resource:126 - java.lang.IllegalArgumentException: URI is not hierarchical
我不记得以前见过他们。
答案 0 :(得分:1)
您是否正在尝试从类路径之外并且从文件系统本身访问此密钥库?从您提供的文件夹结构来看,情况似乎确实如此。如果您删除“ classpath”前缀,然后适当地更新路径,则它应该起作用。
在这篇文章中,您似乎必须以“ file”为前缀
https://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html
答案 1 :(得分:0)
您可以使用Maven资源插件将所需的文件夹添加到插件:
https://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html
然后在没有类路径的情况下使用?