mysql - 如何显式修改数据库连接超时时间
迷茫
迷茫 2017-04-17 14:45:31
0
1
660

spring + mybatis

redis.incr(key); //redis计数加一

try{
    dbOPerHere(); //数据库操作
}catch (Exception e){
    //若数据库操作失败 减一
    redis.decr(key); 
}

想模拟网路异常 数据库连接超时异常 通过如下方式模拟数据库连接异常

sudo iptables -A INPUT -p tcp --dport 3306 -j DROP

但发现要等差不多三分钟 才会有超时异常
另外一个奇怪现象 同样的数据源配置 若换成测试服务器 超时时间为6分钟 不知何故

Caused by: java.net.ConnectException: Connection timed out

如何显式设置数据库连接超时时间(如超时时间5秒), 不管是配置数据源 还是 修改mysql服务器的变量?
使用的数据源如下

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

或修改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    |
+-----------------------------+----------+
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

reply all(1)
巴扎黑
 /**
     * <strong>BasicDataSource does NOT support this method. </strong>
     *
     * <p>Set the login timeout (in seconds) for connecting to the
     * database.</p>
     * <p>
     * Calls {@link #createDataSource()}, so has the side effect
     * of initializing the connection pool.</p>
     *
     * @param loginTimeout The new login timeout, or zero for no timeout
     * @throws UnsupportedOperationException If the DataSource implementation
     *   does not support the login timeout feature.
     * @throws SQLException if a database access error occurs
     */
    public void setLoginTimeout(int loginTimeout) throws SQLException {
        // This method isn't supported by the PoolingDataSource returned by
        // the createDataSource
        throw new UnsupportedOperationException("Not supported by BasicDataSource");
        //createDataSource().setLoginTimeout(loginTimeout);
    }
* <strong>BasicDataSource does NOT support this method. </strong>  *

The above is the source code of dbcp connection pool. I don’t know what exactly this LoginTimeout() does. It is for reference only and I look forward to the follow-up questions.

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template