文档章节

应用连接数据库超时设置

Kevin_JD
 Kevin_JD
发布于 2017/09/07 14:03
字数 534
阅读 92
收藏 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 Timeout时间已到.在操作完成之前超时时间已过或服务器未响应的几种情况

Timeout时间已到.在操作完成之前超时时间已过或服务器未响应 问题 在使用asp.net开发的应用程序查询数据的时候,遇到页面请求时间过长且返回"Timeout时间已到。在操作完成之间超时时间已过或...

呼哈嘿
10/13
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
超时时间已到。在操作完成之前超时时间已过或服务器未响应

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

donny945
2014/06/17
0
1

没有更多内容

加载失败,请刷新页面

加载更多

jquery通过id显示隐藏

var $div3 = $('#div3'); 显示 $div3.show(); 隐藏 $div3.hide();

yan_liu
今天
3
0
《乱世佳人》读书笔记及相关感悟3900字

《乱世佳人》读书笔记及相关感悟3900字: 之前一直听「荔枝」,后来不知怎的转向了「喜马拉雅」,一听就是三年。上班的时候听房产,买房了以后听装修,兴之所至时听旅行,分手后听亲密关系,...

原创小博客
今天
3
0
大数据教程(9.6)map端join实现

上一篇文章讲了mapreduce配合实现join,本节博主将讲述在map端的join实现; 一、需求 实现两个“表”的join操作,其中一个表数据量小,一个表很大,这种场景在实际中非常常见,比如“订单日志...

em_aaron
今天
3
0
cookie与session详解

session与cookie是什么? session与cookie属于一种会话控制技术.常用在身份识别,登录验证,数据传输等.举个例子,就像我们去超市买东西结账的时候,我们要拿出我们的会员卡才会获取优惠.这时...

士兵7
今天
3
0
十万个为什么之为什么大家都说dubbo

Dubbo是什么? 使用背景 dubbo为什么这么流行, 为什么大家都这么喜欢用dubbo; 通过了解分布式开发了解到, 为适应访问量暴增,业务拆分后, 子应用部署在多台服务器上,而多台服务器通过可以通过d...

尾生
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部