數據庫鏈接池技術
數據庫鏈接池負責分配、管理和釋放數據庫的鏈接。
-
數據庫鏈接複用。重複使用現有的數據庫鏈接,能夠避免鏈接頻繁創建、關閉的開銷。
-
統一的鏈接管理。釋放空閒時間超過最大空閒時間的數據庫鏈接,避免由於沒有釋放數據庫鏈接而引發的數據庫鏈接泄漏。
HikariCP
字節碼精簡:優化代碼,直到編譯後的字節碼最少,這樣,CPU緩存能夠加載更多的程序代碼;
優化代理和攔截器:減小代碼,例如HikariCP的Statement proxy只有100行代碼,只有BoneCP的十分之一;
自定義數組類型(FastStatementList)代替ArrayList:避免每次get()調用都要進行range check,避免調用remove()時的從頭至尾的掃描;
自定義集合類型(ConcurrentBag):提升併發讀寫的效率;
其餘針對BoneCP缺陷的優化,好比對於耗時超過一個CPU時間片的方法調用的研究(但沒說具體怎麼優化)。
數據庫鏈接中斷的狀況測試:
HikariCP:等待5秒鐘後,若是鏈接仍是沒有恢復,則拋出一個SQLExceptions 異常;後續的getConnection()也是同樣處理;
C3P0:徹底沒有反應,沒有提示,也不會在「CheckoutTimeout」配置的時長超時後有任何通知給調用者;而後等待2分鐘後終於醒來了,返回一個error;
Tomcat:返回一個connection,而後……調用者若是利用這個無效的connection執行SQL語句……結果可想而知;大約55秒以後終於醒來了,這時候的getConnection()終於能夠返回一個error,但沒有等待參數配置的5秒鐘,而是當即返回error;
BoneCP:跟Tomcat的處理方法同樣;也是大約55秒以後才醒來,有了正常的反應,而且終於會等待5秒鐘以後返回error了;
HttpServletRequest的ServletRequest中和都是接口
HttpServletRequest的繼承自ServletRequest中
HttpServletRequest比ServletRequest多了一些針對於Http協議的方法。例如:
getHeader(), getMethod(), getSession()
1.得到客戶機信息
getRequestURL方法返回客戶端發出請求的完整
URL。getRequestURI方法返回請求行中的資源名部分
。getQueryString方法返回請求行中的參數部分
。getRemoteAddr方法返回發出請求的客戶機的IP地址
getRemoteHost方法返回發出請求的客戶機的完整主機名
getRemotePort方法返回客戶機所用的網絡端口號
getLocalAddr方法返回WEB服務器的IP地址getLocalName方法返回WEB服務器的主機
名
getMethod獲得客戶機請求方式
2.得到客戶機請求頭
getHeader(string name)方法
getHeaders(String name)方法
getHeaderNames方法
3.得到客戶機請求參數(客戶端提交的數據)
getParameter(name)方法
getParameterValues(String name)方法
getParameterNames方法
getParameterMap方法