2014-02-14 30 views
1

我有一個任務來替換當前依賴於mysql的字符串查找系統。一個屏幕會將一個ID和一個語言元素列表傳遞給一個類,然後從mysql中的表中選擇所請求的字符串。根據需要從文件加載屬性

我期待用屬性文件替換mysql表,但我不想一次性將所有屬性加載到對象中。

由於字符串用於舊的遺留系統來渲染屏幕和PDF報告的一部分,我希望在它們被請求時將它們加載到屬性對象中,因此首先檢查屬性對象,如果它不是包含我的鍵「1234Eng」,然後我將它加載到屬性對象中,以便將來可用。

這個想法是因爲有這麼多的消息,我寧願只加載人們訪問過的頁面上使用的那些消息。

任何意見\幫助表示讚賞。

+2

您只需擴展['ResourceBundle'](http://docs.oracle.com/javase/7/docs/api/java/util/ResourceBundle.html)以實現您的定製邏輯 - 當您調用'靜態ResourceBundle.getBundle(String bundleName)'它也會在classpath中尋找'{bundleName} .class'。查看[JavaDoc](http://docs.oracle.com/javase/7/docs/api/java/util/ResourceBundle.html#getBundle(java.lang.String,%20java.util.Locale, %20java.lang.ClassLoader))獲取更多細節。 –

+0

如果可能,請使用多個消息屬性文件。 – pmverma

+0

看看[這個項目](https://github.com/fge/msg-simple):它可以讓你做到你想要的。 – fge

回答

1

你真的確定在內存中的Properties對象太慢,太重,太大而無法保持?在進入更復雜的解決方案之前檢查一下。否則,不要重新發明輪子並使用嵌入式數據庫。我有SQLite的良好體驗,但也有一些純Java嵌入式數據庫,可以給你一個文件和內存訪問的混合(參見this thread作比較)。

+0

我實際上並沒有做任何具體的板凳標記,但是表中有超過9000個字符串,因爲我只是對它們進行了計數。我確實向我的上級建議SQLLite,並被告知它不是替代數據庫的選項,我需要提供非數據庫驅動的解決方案。因爲我們已經使用Oracle,所以在那裏移動桌面將是最容易的...去圖! – berimbolo