Spring+SpringMVC+MyBatis+easyUI整合基礎篇(七)JDBC url的連接參數


在java程序與數據庫連接的編程中,mysql jdbc url格式如下:

jdbc:mysql://[host:port],[host:port].../[database][?參數名1][=參數值1][&參數名2][=參數值2]...

如:jdbc:mysql://localhost:3306/test?user=test&password=123456

剛好最近遇到一個數據庫連接參數帶來的問題,所以羅列一下幾個較為重要的參數:

  • user 數據庫用戶名(用於連接數據庫) 必要參數。

  • password 用戶密碼(用於連接數據庫) 如果設置了密碼的話同樣為必要參數。

  • useUnicode 是否使用Unicode字符集,如果參數characterEncoding設置為utf-8或gbk,本參數值需設置為true,默認為false。

  • characterEncoding 允許用戶自己設定數據庫編碼,指定字符編碼,在程序與數據庫交互時,如果數據的編碼類型與數據庫的編碼類型不一致時,如程序中使用GBK,而數據庫的數據類型為utf8,會出現傳參無法識別導致無法得到預期的數據返回的問題。為了解決此問題,我們需要在URL上設置characterEncoding=utf8。

示例代碼:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8

  • autoReconnect 當數據庫連接異常中斷時,是否自動重新連接, 默認值為false。

  • autoReconnectForPools 是否使用針對數據庫連接池的重連策略, 默認值為false。
      
    以上兩個參數都是設置是否允許連接斷開后自動重連,jdbc中mysql的連接在長時間的連接后,可能會出現斷連或者出現數據庫突然宕機的狀況。重啟數據庫服務可能也會繼續報異常,只有重啟應用重新連接才可以避免繼續報錯,為了解決這種問題,一般會設置此參數,這時可以使用這個參數來要求jdbc 驅動在發現數據庫連接異常后會自動地重新連接。在使用數據連接池的情況,如使用DBCP或者c3p0連接池,應盡量使用autoReconnectForPools。

  • connectTimeout 和數據庫服務器建立socket連接時的超時,單位:毫秒, 0表示永不超時。

  • socketTimeout socket操作(讀寫)超時,單位:毫秒,0表示永不超時 。

JDBC使用socket與數據庫連接,數據庫並不對應用與數據庫間的連接超時進行處理,JDBC的socket timeout在數據庫被突然停掉或是發生網絡錯誤(由於設備故障等原因)時十分重要。由於TCP/IP的結構原因,socket沒有辦法探測到網絡錯誤,因此應用也無法主動發現數據庫連接斷開。如果沒有設置socket timeout的話,應用在數據庫返回結果前會無期限地等下去,這種連接被稱為dead connection。為了避免dead connections,socket必須要有超時配置。socket timeout可以通過JDBC設置,socket timeout能夠避免應用在發生網絡錯誤時產生無休止等待的情況,縮短服務失效的時間。

此參數為jdbc的過期時間設置,與mysql-server的過期時間不是同一參數。

  • socket連接時的timeout:通過Socket.connect(SocketAddress endpoint, int timeout)設置
  • socket讀寫時的timeout:通過Socket.setSoTimeout(int timeout)設置

示例代碼:jdbc:mysql://localhost:3306/test?connectTimeout=60000&socketTimeout=60000

以上為整理的較為常用的參數,如果感興趣可以去官網查閱一下其他參數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM