簡體   English   中英

如何讀取配置文件以在打包為WAR並部署在IBM Liberty的Angular App中設置API URL

[英]How to read config file to set API URL inside an Angular App packaged as a WAR and deployed on IBM Liberty

我已經運行ng build --prod並復制了動態Web項目的webapps文件夾內/dist文件夾的內容。

然后,我嘗試將該項目導出為.war文件並將其部署在Liberty服務器上。 挑戰在於,我已經在environment.prod.ts設置了API URL。

因此,如果需要更改API URL,則需要重新運行ng build並復制/dist內容,然后將其導出為.war

我嘗試將API基本URL設置為window.location.origin因為對於Angular應用程序和微服務而言,基本URL相同。

我們想要的是改為使API URL可從外部配置。 例如,我們創建了最終的.war文件,但是當將其作為容器部署在docker上時,我們讀取了一些配置文件並將其設置為API URL。

由於使用的是Liberty,因此可以使用JAX-RS( 此處為 JAX-RS的教程)創建一個端點,該端點從文件或環境變量中讀取所需的基本URL(可以使用標准Java API或類似的東西) MicroProfile Config )並返回它們作為響應。 將其打包為.war文件的一部分。

然后,在啟動時 ,您的Angular應用程序可以向該端點發出請求(您將始終知道該端點的位置,因為它將是同一窗口.Angular應用程序本身來自的位置,只是一個不同的上下文根和/或路徑。)這將為其提供工作所需的信息。

1)您可以擁有用於配置的json文件,並將其添加到資產文件夾中,然后從代碼中將這些文件引用為api,因此您無需為這些文件進行重建,只需替換資產中的內容文件即可使用。

2)您也可以使用動態導入,但是在這種情況下,您將需要具有自定義的build-pack來處理文件。

第一種解決方案:

您可以在同一Dockerfile中包含ng構建,war文件創建和部署,從而在ng構建步驟之前直接設置API_URL 但這會使您每次更改API_URL時都重新構建一個容器(據我了解,這是您每次重新部署戰爭時所做的工作)。

第二解決方案:

因此,我將為第一個解決方案做出一些假設。

根據您所說的,我假設您正在開發微服務架構。 我還將假設所有您的微服務都通過一個端點(即API網關)公開。

一種可能的解決方案是通過您的API網關公開一個固定端點,Angular App將使用該API_URL獲取API_URL (例如:/ api / url)。 這樣可以解決所有問題,因為您可以使端點(/ api / url)返回所需的內容。

您可以對其進行設置,以使其返回從某個配置存儲/微服務獲取的URL,您可以在任何給定時間輕松對其進行修改。

我唯一看到的缺點是您將依賴該URL來使您的應用程序正常工作。 這使其成為單點故障。 雖然您可以使用一些后備api繞過此操作,以防/ api / url端點不起作用。

暫無
暫無

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

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