簡體   English   中英

在哪里/如何使用tomcat存儲持久數據?

[英]Where/how to store persistent data with tomcat?

我應該在Tomcat Web應用程序中的哪里存儲持久文件?

  • javax.servlet.context.tempdir不可行,重新部署/刪除應用程序后將其刪除
  • 不想在servlet初始化參數中使用絕對路徑
  • 不能將文件存儲在數據庫中

我們的團隊經常這樣做。 我們遵循的一般規則是在Web應用程序外部和Tomcat外部。

我們的系統管理員在服務器上設置了tomcat用戶具有rw權限的目錄(例如/var/tomcat/persist )。 我們在此基礎上構建了一個目錄結構,tomcat使用該目錄結構來存儲文件,讀取特定於應用程序的初始化文件等。

如果您不想在init參數中為servlet使用絕對路徑,請考慮在啟動tomcat時設置系統屬性。 這樣做的好處是,在tomcat下運行的每個應用程序都可以訪問它。 不好的是,在tomcat下運行的每個應用程序都可以訪問它。 您可以設置一個名為base.persist.dir的屬性,並在其下為每個應用程序構建子目錄。 我們在CATALINA_OPTS環境變量下bin /目錄中的setenv.sh腳本中設置系統屬性。

回答問題的標題,如何使用數據庫, DataSource和JDNI? 即使在純Web上下文中,由於並發,線程,安全性,集群,可移植性問題,實際上也不建議使用java.io寫入文件。 其中一些問題可以“解決”,但實際上,這並不是最佳實踐。 標准方法是使用數據庫,我建議重新考慮此選項,將諸如HSQLBD或JavaDB之類的“基於文件的”輕量級數據庫放入組合中。

(編輯:出於未知的原因,數據庫不是一個選擇。使用JNDI或上下文參數或init參數傳遞絕對路徑-IMHO是較差的選項-也被排除在外。對於相對路徑,也許看看user.home然后是user.homeuser.dir或您可以在命令行上傳遞的任何其他系統屬性,我不喜歡它,我不會這樣做,但這不能解決前面提到的問題,但這是您的選擇畢竟。)

將文件存儲在運行Tomcat的用戶的主目錄下的webapp目錄中是一種很好且方便的選擇。 它位於Tomcat外部,這意味着它可以在重新部署后幸免於難,並且通常是可寫目錄(因為它是在用戶的主目錄下創建的)。 但是,允許通過系統屬性覆蓋該目錄的位置始終是一個好主意。

通常,這將轉到數據庫。 但是由於OP堅持不使用數據庫,因此我嘗試使用另一種方法:

  • 已知的文件系統路徑: ${user.home}/.myapp 應用程序有時將其用於例如搜索索引,可以根據數據庫中的數據重新計算搜索索引。 對於您的用例來說,使用用戶的家可能還可以。
  • 將可配置文件系統路徑存儲在配置存儲庫中,例如數據庫或Java偏好設置 (如果您不喜歡使用servlet init參數)。 諸如Atlassian JIRA之類的商業應用程序使用可配置(但絕對)的文件系統路徑來存儲問題附件。 如果他們不知道更好的方法,我不知道誰做的:)

我通常建議使用數據庫存儲持久性數據並通過DataSource公開它。

如果您不想這樣做,我想您可以考慮使用“ user.home”系統屬性(我在某些情況下已經看到過)。 但是...除非您自行配置,否則不能保證您的servlet將在具有寫訪問權限的情況下運行。

暫無
暫無

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

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