Mysql上線長時間以後重新發起請求報錯

mysql機制及錯誤原因:當連接閒置超過八小時後,mysql會自動斷開連接,此時連接失效,但是數據庫認爲此時連接依然有效,連接的時候發現失效,報錯。
解決辦法:增加對連接池中連接的測試/驗證,防止數據庫認爲連接已死而Web應用服務器認爲連接還有效
添加參數:
testOnBorrow:檢測池裏連接的可用性 設置爲true是會見降低性能
validationQuery:驗證數據庫連接的查詢語句
testWhileIdle:建議配置爲true,不影響性能,並且保證安全性。申請連接的時候檢測,如果空閒時間大於timeBetweenEvictionRunsMillis,執行validationQuery檢測連接是否有效。

public static final String DBDRIVER = "com.mysql.jdbc.Driver";
public static final String DBURL = "jdbc:mysql://xxx.xxx.xx.xx:3306/omslocal?useSSL=false&autoReconnect=true&testWhileIdle=true&testOnBorrow=true&validationQuery=select 1"; //考慮性能,此處請酌情修改 
public static final String DBUSER = "xxx";
public static final String PASSWORD = "xxx";

public static java.sql.Connection connection = null;
public static java.sql.PreparedStatement preparedStatement = null;
public static java.sql.ResultSet resultSet = null;

public static String getConnection() {
    try {
        Class.forName(DBDRIVER);
        DriverManager.setLoginTimeout(5);
        connection = DriverManager.getConnection(DBURL, DBUSER, PASSWORD);
        return "success";
    } catch (ClassNotFoundException e) {
        return "ClassNotFoundException";
    } catch (SQLException e) {
        return  e.toString();
    }
}

參考配置:

<!--initialSize: 初始化連接-->  
<property name="initialSize" value="5"/>  

<!--maxIdle: 最大空閒連接-->  
<property name="maxIdle" value="10"/>  

<!--minIdle: 最小空閒連接-->  
<property name="minIdle" value="5"/>  

<!--maxActive: 最大連接數量-->  
<property name="maxActive" value="15"/>  

<!--removeAbandoned: 是否自動回收超時連接-->  
<property name="removeAbandoned" value="true"/>  

<!--removeAbandonedTimeout: 超時時間(以秒數爲單位)-->  
<property name="removeAbandonedTimeout" value="180"/>  

<!--maxWait: 超時等待時間以毫秒爲單位 6000毫秒/1000等於60秒-->  
<property name="maxWait" value="3000"/>  

<property name="validationQuery">  
<value>SELECT 1</value>  
</property>  

<property name="testOnBorrow">  
<value>true</value>  
</property>  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章