【发布时间】:2016-10-09 08:00:04
【问题描述】:
我的 Spring Boot 休息应用程序的 src/main/resources 下有两个 jks 文件
- Test1.jks 通过 https 进行出站调用另一个 rest api。
- Test2.jks 在这个 rest api 中启用 https。
我正在使用 Spring Boot 入口点中的相对关系设置资源文件 test1.jks 的路径,该入口点运行良好。这些 jks 文件用于调用 https 服务。
public class TestApp {
static
{
System.setProperty("javax.net.ssl.trustStore", "TestApp.class.getClassLoader().getResource("test1.jks").getFile()");
System.setProperty("javax.net.ssl.trustStorePassword", password);
System.setProperty("javax.net.ssl.keyStore", "TestApp.class.getClassLoader().getResource("test1.jks").getFile()");
System.setProperty("javax.net.ssl.keyStorePassword", password);
}
public static void main(String[] args) {
SpringApplication.run(TestApp.class, args);
}
}
application.properties
server.port=8443
server.ssl.key-store=test2.jks
server.ssl.key-store-password=test
server.ssl.trust-store=classpath:test2.jks
server.ssl.trust-store-password=test
server.ssl.key-password=test
当我使用 mvn spring-boot:run 运行时,一切正常,但是当我将其作为可执行 jar java -jar target/xxx-xxx-service-0.1.1-SNAPSHOT.jar 运行时,出现以下错误。
Caused by: org.springframework.boot.context.embedded.EmbeddedServletContainerException: Could not find key store classpath:test2.jks
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.configureSslKeyStore(TomcatEmbeddedServletContainerFactory.java:292)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.configureSsl(TomcatEmbeddedServletContainerFactory.java:271)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.customizeConnector(TomcatEmbeddedServletContainerFactory.java:248)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.getEmbeddedServletContainer(TomcatEmbeddedServletContainerFactory.java:147)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:157)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)
... 13 more
Caused by: java.io.FileNotFoundException: class path resource [test2.jks] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/Users/xxx/xxx/Himalay/xxx/xxx-xxx-service/target/xxx-xxx-service-0.1.17-SNAPSHOT.jar!/test2.jks
at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:212)
at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:175)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory.configureSslKeyStore(TomcatEmbeddedServletContainerFactory.java:288)
... 18 more
在评论 application.properties 后,我发现使用可执行 jar 命令运行时它甚至无法读取 test1.jks,但使用 mvn spring-boot 运行良好:运行,如何使用可执行的jar命令让它运行?
注意:如果我使用 jks 文件的绝对路径,这两个命令都可以正常工作。
【问题讨论】:
-
这可能会有所帮助:stackoverflow.com/questions/344748/…
-
正如@wemu 评论指出的那样,您不能在 Jar 中嵌入的资源上使用 getFile()。使用输入流
-
这和你的其他问题不是同一个问题吗? stackoverflow.com/questions/37713335/…
标签: java spring maven spring-boot resourcebundle