在正式的專案編碼過程中,乙個成熟的程式設計師是不會允許出現任何hard code即硬編碼的字元的。比如「user.name」、「user.password」等等。所有的這些配置項,都需要通過配置檔案進行配置,然後從配置檔案取值。這也是我們通常說的配置讀寫分離。
當然我一開始入行的時候,也是直接在**中寫死所有的值,這樣的寫法可維護性太差了。後來也是通過不斷的學習總結出這樣的乙個工具類,當然我們也知道像spring這麼優秀的框架,早就整合了讀取配置檔案配置項的註解,在類成員上直接寫上@value即可取到值。在這裡我們暫且不說,而是自己從頭到尾寫乙個這樣的工具類。
配置管理元件可以複雜,也可以很簡單,對於簡單的配置管理元件來說,只需要開發乙個類,在第一次訪問它的時候,就從對應的properties檔案讀取配置項,並提供外界獲取某個配置key對應的value方法。如果是特別複雜的配置管理元件,那麼可能需要使用一些軟體設計中的設計模式,比如單例模式。可能需要管理多個不同的properties,甚至是xml型別的配置檔案。我們今天就寫乙個簡單的配置管理工具類即可,下面讓我們直接開始編碼吧。
/**
* 配置管理元件
* * @author administrator
* */
public class configurationmanager 構成的靜態**塊決定,我們自己可以在類中開發靜態**塊
* 類第一次使用的時候,就會載入,載入的時候,就會初始化類,初始化類的時候就會執行類的靜態**塊
* * 因此,對於我們的配置管理元件,就在靜態**塊中,編寫讀取配置檔案的**
* 這樣的話,第一次外界**呼叫這個configurationmanager類的靜態方法的時候,就會載入配置檔案中的資料
* * 而且,放在靜態**塊中,還有乙個好處,就是類的初始化在整個jvm生命週期內,有且僅有一次,也就是說
* 配置檔案只會載入一次,然後以後就是重複使用,效率比較高;不用反覆載入多次
*/ static catch (exception e)
} /**
* 獲取指定key對應的value
* * * 第一次外界**,呼叫configurationmanager類的getproperty靜態方法時,jvm內部會發現
* configurationmanager類還不在jvm的記憶體中。
* * * 此時jvm,就會使用自己的classloader(類載入器),去對應的類所在的磁碟檔案(.class檔案)中
* 去載入configurationmanager類,到jvm記憶體中來,並根據類內部的資訊,去建立乙個class物件
* class物件中,就包含了類的元資訊,包括類有哪些field(properties prop);有哪些方法(getproperty)。
* * * 載入configurationmanager類的時候,還會初始化這個類,那麼此時就執行類的static靜態**塊
* 此時咱們自己編寫的靜態**塊中的**,就會載入my.properites檔案的內容,到properties物件中來。
* * * 下一次外界**,再呼叫configurationmanager的getproperty()方法時,就不會再次載入類,不會再次初始化
* 類,和執行靜態**塊了,所以也印證了,我們上面所說的,類只會載入一次,配置檔案也僅僅會載入一次。
* * @param key
* @return value
*/public static string getproperty(string key)
/*** 獲取整數型別的配置項
* * @param key
* @return value
*/public static integer getinteger(string key) catch (exception e)
return 0;
} /**
* 獲取布林型別的配置項
* * @param key
* @return value
*/public static boolean getboolean(string key) catch (exception e)
return false;
} /**
* 獲取long型別的配置項
* * @param key
* @return
*/public static long getlong(string key) catch (exception e)
return 0l;
}}
如上,我們寫了乙個簡單的工具類,在類第一次使用初始化的時候去讀取classpath下的my.properties檔案並載入檔案中的資料。下面我們在classpath下建立my.properties檔案,並使用key=value形式寫兩個測試資料。
test.key.1=testkey1
test.key.2=testkey2
接下來,我們做個簡單的測試。
public class configurationmanagertest
}// 控制台輸出
test.key.1=testkey1
test.key.2=testkey2
乙個配置管理員的困惑
作配置管理快兩年了,最近遇到了件很鬱悶的事。前一段時間老總跟我說馬上製作乙個 專案當前成熟的版本給客戶去試用,然後就走掉了。每次當我出版本的時候都會遵循 提交 收集 系統構建 安裝 測試這樣的基本流程去做。但是當我們費了九牛二虎之力終於出了乙個系統軟體版本的時候。有些開發人員跑過來跟我說 在你出版本...
Yaconf 乙個高效能的配置管理擴充套件
鳥哥出品 首先說說,這個是幹啥的.我見過很多的專案中,用php檔案做配置的,乙個config目錄下可能有十幾個甚至數十個.php配置檔案,裡面都是各種各樣的array,還有甚者會把一些詞典檔案 比如中文 英文對照 也放到配置中去.這就導致配置檔案的解析耗費了很大的效能 誠然,用了opcache能好點...
完成乙個簡單的使用者管理系統
完成乙個簡單的使用者管理系統,其中使用者的資訊包含以下 使用者id 使用者名稱 密碼 性別 生日 手機號 賬戶狀態 要求實現以下功能 使用者登入 使用者新增 根據id查詢使用者 查詢所有使用者 修改指定id的使用者密碼 修改指定id使用者的登入狀態 根據id刪除指定使用者 使用者狀態是0的時候表示賬...