【问题标题】:"mvn spring-boot:run" vs "java jar target/xxx.jar"“mvn spring-boot:run”与“java jar target/xxx.jar”
【发布时间】:2016-10-09 08:00:04
【问题描述】:

我的 Spring Boot 休息应用程序的 src/main/resources 下有两个 jks 文件

  1. Test1.jks 通过 https 进行出站调用另一个 rest api。
  2. 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 文件的绝对路径,这两个命令都可以正常工作。

【问题讨论】:

标签: java spring maven spring-boot resourcebundle


【解决方案1】:

试试这个: String filePath= Thread.currentThread().getContextClassLoader().getResource("your-trust-store.jks").getFile(); System.setProperty("javax.net.ssl.keyStore", filepath);

【讨论】:

    猜你喜欢
    • 2018-04-25
    • 2022-11-23
    • 1970-01-01
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2019-05-19
    相关资源
    最近更新 更多