簡體   English   中英

如何從spring-boot jar BOOT-INF \\ lib文件夾中提取文件

[英]how to extract a file from spring-boot jar BOOT-INF\lib folder

啟動spring-boot應用程序時,如何提取與spring-boot jar打包在一起的*.zip文件。 我之所以要提取它們,是因為這些依賴項*.zip包含特定於環境的本機文件(對於window .dll,對於linux .so)。

我想我可以使用https://docs.spring.io/spring-boot/docs/1.4.x/reference/htmlsingle/#howto-extract-specific-libraries-when-an-executable-jar-runs

如何將該臨時位置設置為java.libarary.path或我可以配置該路徑。

問題“如何獲取特定於環境的配置文件?”有兩種典型的解決方案。

解決方案1:使用一個屬性文件,其中包含每種環境的設置。 使用特定於環境的屬性后綴。 這是一個例子:

    dev.port=123456
    ist.port=98745
    prod.prot=90458

根據應用程序運行的環境,它將選擇端口值之一。

解決方案2:Spring-Boot允許您為應用程序屬性配置替代文件。 一種方法是在調用springApplication.run方法之前設置“ spring.config.location”值。 這是一個示例(長字符串包裝成適合不滾動顯示):

springApplicationBuilder.properties(
    "spring.config.location=classpath:/default.properties," +
    "/local/path/on/deploy/host/config/overrides.properties");
springApplication = springApplicationBuilder.build();

springApplication.run(argumentArray);

編輯:更新每個評論。

考慮執行以下操作:

  1. 將每個主機的JNDI文件存儲在每個主機本地。
  2. 將JNDI文件的路徑(在主機上)存儲在配置屬性中。
  3. 在每台機器上配置JNDI文件路徑(通過使用覆蓋文件或通過使用環境變量)。

不可能在運行時知道該zip的解壓縮位置,這意味着您無法提前設置java.library.path

我建議將.dll.so文件原樣保留在您的項目中,而不要將它們打包在zip文件中。 這樣,您就可以在設置庫路徑時引用一個恆定路徑。

我會避免將它們直接放置在resources目錄中,而是將其放置在單獨的目錄中。 這只是個人喜好; 我相信,如果您將本機文件放在那里,它將起作用,並且我相信在這種情況下,您需要設置java.library.path=resources (未經測試)。

例如,我們使用Docker部署了具有本地依賴項的spring boot應用程序,我們只是將.so文件掛載為Docker卷,該卷在/native的容器中可用。 然后,我們只是將JVM args設置為包括-Djava.library.path=/native

請注意,您可能還需要為Linux設置LD_LIBRARY_PATH 這個問題可能會有所幫助。

暫無
暫無

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

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