jdbc cancel mysql_JDBC查询超时时间设置

我们有时候需要控制SQL查询的最大耗时,比如一个“执行时长”的SQL在指定时间内如果没有执行完毕,我们需要“取消”此SQL,我们知道在JDBC中Statement类可以通过setQueryTimeout()来实现此特性。

当设置query timeout之后,JDBC客户端发送请求,并等待直到执行完成或者超时,当超时后,客户端尝试cancel当前SQL,要求mysql server中断执行,因为网络通讯需要时间,可能在客户端尝试cancel时,mysql server已经执行成功,此时请求将会返回(而不是取消);超时后取消成功,那么当前客户端调用将会抛出SQLTimeoutException。

queryTimeout选项,目前不能在JDBC Url中作为properties传入,所以不能像socketTimeout、connectionTimeout参数那样可以在URL中指定。

一、mybatis设置timeout

1、在mybatis-config.xml中设置:此处设置对全局的所有sql都生效,包括insert、select、update等。

2、在statement语句中设置:只对当前statement有效,select、insert、update等语句中都有timeout属性

id="selectPerson"

timeout="10000" ...>

二、 JPA中设置

1、为当前查询设定timeout:

String sql = "SELECT ...";

TypedQuery query = entityManager.createQuery(sql, User.class);

query.setParameter("id", id);

//此处设置timeout,单位:毫秒

query.setHint("javax.persistence.query.timeout", 20000);

2、JPA全局配置

false

false

##单位:秒,默认不开启timeout 参数

我们只需要在Resource配置中增加一个jdbcInterceptors即可,具体配置参见【tomcat-pool】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值