查了一下發現應用程序和mysql數據庫建立連接,如果超過8小時應用程序不去訪問數據庫,數據庫就斷掉連接 。這時再次訪問就會拋出異常。
關於mysql自動斷開的問題研究結果如下,
1、在自己的程序中插入定時訪問數據庫的方法,比如使用Timer,Quartz或者spring中簡易Quartz。
2、在mysql中有相關參數設定,當數據庫連接空閒一定時間後,服務器就會斷開等待超時的連接:
相關參數
mysql> show variables like '%timeout%'; +-----------------------------+----------+ | Variable_name | Value | +-----------------------------+----------+ | connect_timeout | 10 | | delayed_insert_timeout | 300 | | innodb_flush_log_at_timeout | 1 | | innodb_lock_wait_timeout | 50 | | innodb_rollback_on_timeout | OFF | | interactive_timeout | 28800 | | lock_wait_timeout | 31536000 | | net_read_timeout | 30 | | net_write_timeout | 60 | | rpl_stop_slave_timeout | 31536000 | | slave_net_timeout | 3600 | | wait_timeout | 28800 | +-----------------------------+----------+ 12 rows in set
同一時間,interactive_timeout,wait_timeout 這兩個參數只有一個起作用。
到底是哪個參數起作用,和用戶連接時指定的連接參數相關,缺省情況下是使用wait_timeout。
我在配置文件中將wait_timeout修改後在mysql中查尋到還是不起作用,於是將這兩個參數都修改了,再次查詢wait_timeout的值後才顯示修改後的。
2、修改參數
這兩個參數的默認值是8小時(60*60*8=28800)。測試過將這兩個參數改為0,系統自動將這個值設置為1。也就是說,不能將該值設置為永久。
將這2個參數設置為24小時(60*60*24=86400)。
set interactive_timeout=86400;
set wait_timeout=86400;
也可以修改my.cof,修改後重起mysql
打開/etc/my.cnf,在屬性組mysqld下面添加參數如下:
[mysqld]
interactive_timeout=28800000
wait_timeout=28800000
如果一段時間內沒有數據庫訪問則mysql自身將切斷連接,之後訪問java訪問連接池時對數據庫的數據通道早就關閉了。