簡體   English   中英

在Java Web應用程序(WAR)中存儲配置文件的最佳位置是什么?

[英]What is the best place to store a configuration file in a Java web application (WAR)?

我創建一個Web應用程序(WAR)並將其部署在Tomcat上。 webapp中,有一個頁面,其中包含管理員可以輸入某些配置數據的表單。 我不想將這些數據存儲在DBMS中,而只是存儲在文件系統上的XML文件中。 在哪里放?

我想將文件放在部署應用程序本身的目錄樹中的某個位置。 我的配置文件應該在WEB-INF目錄中嗎? 或者把它放在別的地方?

什么是在servlet中使用的Java代碼來查找目錄的絕對路徑? 或者可以通過相對路徑訪問它?

我們所做的是將它放在服務器上的一個單獨目錄中(你可以使用/ config,/ opt / config,/ root / config,/ home / username / config或任何你想要的東西)。 當我們的servlet啟動時,他們會讀取XML文件,從中獲取一些東西(最重要的是數據庫連接信息),就是這樣。

我問過為什么我們這樣做了一次。

將所有內容存儲在數據庫中會很好,但顯然您無法在數據庫中存儲數據庫連接信息。

你可以在代碼中硬編碼,但由於很多原因,這很難看。 如果信息必須更改,則必須重新構建代碼並重新部署。 如果有人獲得了您的代碼或WAR文件的副本,那么他們就會獲得該信息。

把東西放在WAR文件中看起來不錯,但是如果你想改變很多東西,這可能是一個壞主意。 問題是,如果你必須更改信息,那么下次重新部署它將覆蓋該文件,因此任何你不記得更改內置到WAR中的版本的內容都會被遺忘。

文件系統中特殊位置的文件對我們來說非常有用。 它沒有任何重大缺點。 你知道它在哪里,它是單獨存儲的,如果它們都需要不同的配置值(因為它不是WAR的一部分),它可以很容易地部署到多台機器上。

我能想到的唯一能夠正常工作的其他解決方案是將數據庫中的所有內容保留在數據庫登錄信息之外。 這將來自通過JVM檢索的Java系統屬性。 這是Hans Doggen上面提到的Preferences API。 我不認為它是在我們的應用程序最初開發時,如果它沒有被使用。

至於訪問配置文件的路徑,它只是文件系統上的一個文件。 您無需擔心Web路徑。 因此,當您的servlet啟動時,它只需在“/config/myapp/config.xml”(或其他)打開文件,它就會找到正確的東西。 只是硬編碼這個路徑似乎對我來說是無害的。

WEB-INF是放置配置文件的好地方。 這是從servlet獲取目錄的絕對路徑的一些代碼。

public void init(ServletConfig servletConfig) throws ServletException{
    super.init(servletConfig);
    String path = servletConfig.getServletContext().getRealPath("/WEB-INF")

將它放在WEB-INF會將XML文件隱藏到嘗試直接通過URL訪問它的用戶,所以是的,我會說把它放在WEB-INF

我不會將它存儲在應用程序文件夾中,因為這會使用應用程序的新部署覆蓋配置。

我建議您查看Preferences API,或者在users文件夾(運行Tomcat的用戶)中編寫一些內容。

答案取決於您打算如何讀取和寫入該配置文件。

例如,Spring框架使您能夠使用XML配置文件 (或Java屬性文件); 這些可以存儲在類路徑中(例如,在WEB-INF目錄中),文件系統的任何其他位置,甚至存儲在內存中。 如果您為此使用Spring,那么存儲配置文件的最簡單位置是在您的WEB-INF目錄中,然后使用Spring的ClassPathXmlApplicationContext類來訪問您的配置文件。

但同樣,這一切都取決於您計划如何訪問該文件。

如果是你的自定義配置WEB-INF是一個好地方。 但是一些庫可能需要配置駐留在WEB-INF /類中。

暫無
暫無

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

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