讀取properties配置文件 package com.easycrud.utils; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import java.util.Map; ...
讀取properties配置文件
package com.easycrud.utils;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
/**
* @BelongsProject: EasyCrud
* @BelongsPackage: com.easycrud.utils
* @Author: xpx
* @Email: [email protected]
* @CreateTime: 2023-05-02 16:05
* @Description: 讀取properties配置文件工具類
* @Version: 1.0
*/
public class PropertiesUtils {
private static Properties props = new Properties();
private static Map<String,String> PROPER_MAP = new ConcurrentHashMap<String, String>();
/**
* 項目初始化時就去讀取配置文件
*/
static {
InputStream is = null;
try{
is = PropertiesUtils.class.getClassLoader().getResourceAsStream("application.properties");
props.load(is);
Iterator<Object> iterator = props.keySet().iterator();
while (iterator.hasNext()){
String key = (String) iterator.next();
PROPER_MAP.put(key,props.getProperty(key));
}
}catch (Exception e){
}finally {
if (is != null){
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* 對外提供方法通過key取值
* @param key
* @return
*/
public static String getString(String key) {
return PROPER_MAP.get(key);
}
/**
* 測試能否成功取值
* @param args
*/
public static void main(String[] args) {
System.out.println("測試列印:"+getString("db.driver.name"));
}
}
新手引導
Properties
Properties 繼承於 Hashtable。表示一個持久的屬性集.屬性列表中每個鍵及其對應值都是一個字元串。
ConcurrentHashMap
HashTable是一個線程安全的類,它使用synchronized來鎖住整張Hash表來實現線程安全,即每次鎖住整張表讓線程獨占,相當於所有線程進行讀寫時都去競爭一把鎖,導致效率非常低下。ConcurrentHashMap可以做到讀取數據不加鎖,並且其內部的結構可以讓其在進行寫操作的時候能夠將鎖的粒度保持地儘量地小,允許多個修改操作併發進行,其關鍵在於使用了鎖分段技術。它使用了多個鎖來控制對hash表的不同部分進行的修改。對於JDK1.7版本的實現, ConcurrentHashMap內部使用段(Segment)來表示這些不同的部分,每個段其實就是一個小的Hashtable,它們有自己的鎖。只要多個修改操作發生在不同的段上,它們就可以併發進行。JDK1.8的實現降低鎖的粒度,JDK1.7版本鎖的粒度是基於Segment的,包含多個HashEntry,而JDK1.8鎖的粒度就是HashEntry(首節點)。
static
static代碼塊一般用於初始化類中的靜態變數,該靜態代碼塊在類載入過程中的初始化階段執行,並且只執行一次。
InputStream
位元組輸入流。
try...cache...finally
try{
可能發生異常的代碼
}catch(可能發生的異常類型 異常對象名){
當前異常類型的處理方式
}finally{
一定要執行的代碼
}
IOException
IOException 是在使用流、文件和目錄訪問信息時引發的異常的基類
e.printStackTrace()
在命令行列印異常信息在程式中出錯的位置及原因。
Class.getClassLoader().getResourceAsStream()
Class是當前類的Class對象,Class.getClassLoader()是獲取當前類的類載入器。類載入器的大概作用是當需要使用一個類時,載入該類的".class"文件,並創建對應的class對象,將class文件載入到虛擬機的記憶體。getResourceAsStream()是獲取資源的輸入流。類載入器預設是從classPath路徑載入資源。
load()
Properties的方法是逐行讀取properties配置文件,分隔成兩個字元串key和value,將他們放進Properties對象中。
Iterator
迭代器 it 的三個基本操作是 next 、hasNext 和 remove。
調用 it.next() 會返回迭代器的下一個元素,並且更新迭代器的狀態。
調用 it.hasNext() 用於檢測集合中是否還有元素。
調用 it.remove() 將迭代器返回的元素刪除。
keySet()
如果有一個Map對象,可以使用 map.keySet()方法獲取所有的key值。
A=xxx.iterator()
獲取迭代器保存在A中。