文档章节

应用连接数据库超时设置

Kevin_JD
 Kevin_JD
发布于 2017/09/07 14:03
字数 534
阅读 74
收藏 1

1. JDBC MySQL Driver连接串超时设置

jdbc:mysql://xxx.xx.xxx.xxx:3306/database?connectTimeout=60000&socketTimeout=60000

如上连接串实例, 可以通过connectTimeout和socketTimeout设置超时, 含义说明:

  • connectTimeout: 和mysql服务器建立socket连接的超时时间, 默认值0, 表示不设置超时, 单位为毫秒,建议设置为30000
  • socketTimeout:客户端和mysql服务器之间建立socket后, 读取/写入socket时的等待超时时间, linux系统默认的socketTimeout为半小时,可以不设置

这两个超时也可以配置到dbcp的connectionProperties属性中。

2. 连接池配置超时

maxWait: 表示从连接池取连接, 连接池中没有可用连接时的等待时间, 默认值为0, 表示无限等待, 单位为毫秒, 建议设置为60000足够, 60s取不到连接就早点报错吧。

3. Mybatis配置查询超时

在mybatis配置文件中配置默认查询超时时间: defaultStatementTimeout, 单位为秒,不设置则会无限等待。

<configuration>
    <settings>
        <setting name="defaultStatementTimeout" value="30"/>
    </settings>
</configuration>

如果某一些sql语句需要执行超过defaultStatementTimeout可以通过Mapper文件单独设置sql的超时时间。

<mapper namespace="com.co.sa.sample.Mapper">
    <select id="selectXXX" parameterType="com.co.sa.SamplePojo"  timeout="600" >
        select xxx from xxx
    </select>
</mapper>

4. 事务超时

事务超时用于控制事务执行的超时, 执行时间是事务内所有代码执行时间总和, 单位为秒。

事务超时有两种配置方式,一种是注解:

在spring的配置文件中配置注解驱动:

<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>

然后在代码中添加@Transactional注解, 此时可以在注解中设置事务超时时间, 单位为秒:

@Transactional(timeout=2)
public void doSomething(Foo foo) {
    //do something
}

另外一种配置超时的时间是通过spring的tx:advice节点来设置, 单位为秒:

<tx:advice transaction-manager="transactionManager">
    <tx:attributesType>
        <tx:method name="update*" timeout="3"></tx:method>
        <tx:method name="delete*" timeout="3"></tx:method>
    </tx:attributesType>
</tx:advice>

事务超时无法全局配置。上述两种配置方式只能有一种起作用。

参考资料:

http://www.cubrid.org/blog/understanding-jdbc-internals-and-timeout-configuration

http://www.mybatis.org/mybatis-3/configuration.html

https://commons.apache.org/proper/commons-dbcp/configuration.html

© 著作权归作者所有

共有 人打赏支持
Kevin_JD
粉丝 1
博文 4
码字总数 1930
作品 0
海淀
高级程序员
JDBC连接超时问题

这两天遇到一个问题,早上来了登录我们的项目网站第一次登录总是登不上去,第二次就好了,我看了一下后台的报错信息是这样的: The last packet successfully received from the server was ...

Trigl
2016/07/28
0
0
这样诊断和调优,轻松与数据库"timeout"说再见

作者介绍 下面是用户访问一个Web站点的常见错误: src="https://mmbiz.qlogo.cn/mmbizjpg/tibrg3AoIJTupEygel5vDWICEDdFel1bice7zXMx6iaEOCtyCGyzpcnb1MMon7eWDsusWG2nSb3vMKn0m93IlcQWg/0?w......

许昌永
2016/11/09
0
0
DBCP连接池参数详解-2.4.0版本

BasicDataSource 配置参数 这些配置均在dbcp源码的BasicDataSource类的createPoolableConnectionFactory方法中使用和初始化。具体代码如下: protected PoolableConnectionFactory createPo...

二两豆腐
07/17
0
0
数据库连接池应用中数据库服务器断开超时连接的问题

数据库应用开发过程中,我们可能会遇到一个问题:应用使用了数据库连接池,每经过指定时间后,发出到数据库服务器的任何请求都会失败,而且有且仅有一次失败,之后的正常访问都没有问题。尤其...

如风达
2015/09/18
137
0
超时时间已到。在操作完成之前超时时间已过或服务器未响应

报错,“超时时间已到。在操作完成之前超时时间已过或服务器未响应” 初步分析原因为对MSSQL操作时连接超时,知道这事,以前没留意,大概是在配置文件中设置连接时限,在网上找了下解决方法,...

donny945
2014/06/17
0
1

没有更多内容

加载失败,请刷新页面

加载更多

HBase 表修复在线方式和离线方式

一、在线修复 1.1 使用检查命令 $ ./bin/hbase hbck 该命令可完整修复 HBase 元数据信息;存在有错误信息会进行输出; 也可以通过如下命令查看详细信息: $ ./bin/hbase hbck -details 1.2 ...

Ryan-瑞恩
10分钟前
0
0
redis 系列二 -- 常用命令

1.基础命令 info ping quit save dbsize select flushdb flushall 2.键命令 2.1 set 直接赋值 set a a 2.2 get 取值 get a 2.3 exists 是否存在 exists a 2.4 expire 设置剩余时间 秒 expire......

imbiao
41分钟前
1
0
php foreach

<?php// 数组的引用$a=array(1,2,3,4,5);foreach($a as $key=>&$value){$value=$value*2;}print_r($a);echo " $key -------------------$value\r\n";/** * ...

小张525
50分钟前
1
0
12-利用思维导图梳理JavaSE-多线程

12-利用思维导图梳理JavaSE-多线程 主要内容 1.线程概念 2.线程开发 3.线程的状态 4.线程的同步和死锁 5.Java5.0并发库类 QQ/知识星球/个人WeChat/公众号二维码 本文为原创文章,如果对你有一...

飞鱼说编程
今天
0
0
JAVA集合之ArrayList

一、前言 Java 集合类提供了一套设计良好的支持对一组对象进行操作的接口和类,JAVA常用的集合接口有4类,分别是: Collection:代表一组对象,每一个对象都是它的子元素 Set:不包含重复元素...

木木匠
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部