簡體   English   中英

“mvn spring-boot:run”vs“java jar target / xxx.jar”

[英]“mvn spring-boot:run” vs “java jar target/xxx.jar”

我的Spring Boot rest應用程序中的src / main / resources下有兩個jks文件

  1. Test1.jks通過https撥打另一個休息api。
  2. Test2.jks在這個rest api中啟用https。

我正在設置資源文件test1.jks的路徑使用相似如下的Spring Boot入口點,它已經正常工作。 這些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:runmvn 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運行正常:運行 ,如何使用executable jar命令運行它?

注意:如果我使用jks文件的絕對路徑,它可以正常使用這兩個命令。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM