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

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    |
+-----------------------------+----------+
迷茫
迷茫

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

全員に返信(1)
巴扎黑
 /**
     * <strong>BasicDataSource はこのメソッドをサポートしていません。 </strong>
     *
     * <p>接続時のログインタイムアウトを秒単位で設定します。
     * データベース。</p>
     * <p>
     * {@link #createDataSource()} を呼び出すため、副作用があります
     * 接続プールの初期化。</p>
     *
     * @param loginTimeout 新しいログイン タイムアウト、またはタイムアウトなしの場合は 0
     * @throws UnsupportedOperationException DataSource 実装の場合
     ※ログインタイムアウト機能はサポートしていません。
     * データベースアクセスエラーが発生した場合は @throws SQLException
     */
    public void setLoginTimeout(int loginTimeout) throws SQLException {
        // このメソッドは、によって返される PoolingDataSource ではサポートされていません。
        // createDataSource
        throw new UnsupportedOperationException("BasicDataSource ではサポートされていません");
        //createDataSource().setLoginTimeout(loginTimeout);
    }
* BasicDataSource はこのメソッドをサポートしていません。 </strong>  *

以上は dbcp 接続池のソースコードであり、LoginTimeout() が具体的にどのように実行されるかは不明ですが、単に参考として提供し、その後の継続を期待しています。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート