那些妳不知道的 JDBC 異常類型:
(1)java.sql.SQLException: connection holder is null。
連接超時,主要是 update 或者select 的數據量太大超過,連接持有時間。
解決方式;分片查詢 最好 2000以內,查詢出來就立刻處理。否則數據量大的時候,會占用很多的JVM內存。
對應配置:主要是數據庫連接池的配置, druid 對應removeAbandonedTimeout。
(2)com.mysql.jdbc.exceptions.jdbc4.CommunicationsException。
同上。
當數據庫重啟或數據庫空閑連接超過設置的最大timemout時間,數據庫會強行斷開已有的鏈接,最大timeout時間可以通過命令。
使用數據庫連接池的時候,增加連接池的數據庫連接超時時間,但是不能超過數據配置的時間。在連接池中配置testOnBorrow,即申請連接的時候先試壹試連接是否可用,不過帶來的影響就是性能降低,需要根據實際需求合理取舍。
(3)com.mysql.jdbc.PacketTooBigException。
主要是批量insert入庫的時候,數據量太大導致的,建議分片錄入到數據庫中,比如 每2000條數據入庫壹次。
對應mysql的配置參數:這個參數默認是1M。可以臨時修改這個值解決問題,最終還是要通修改程序來解決,否則會嚴重降低系統性能。