我们有时候需要控制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等。
<settings> <setting name="defaultStatementTimeout" value="25"/> <!-- 单位:秒 --> </settings>
2、在statement语句中设置:只对当前statement有效,select、insert、update等语句中都有timeout属性
<select id="selectPerson" timeout="10000" ...>
二、 JPA中设置
1、为当前查询设定timeout:
String sql = "SELECT ..."; TypedQuery<User> query = entityManager.createQuery(sql, User.class); query.setParameter("id", id); //此处设置timeout,单位:毫秒 query.setHint("javax.persistence.query.timeout", 20000);
2、JPA全局配置
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <property name="jpaProperties"> <props> <prop key="eclipselink.cache.shared.default">false</prop> <prop key="eclipselink.weaving">false</prop> <prop key="javax.persistence.query.timeout”>20000<prop/> </props> </property> </bean>
三、JNDI方式配置
通常情况下,我们线上的数据库datasource管理是基于JNDI的方式,当然我们可以在JNDI中管理此选项,本文基于tomcat-pool的方式:
<Resource name="jdbc/masterDB" jdbcInterceptors="QueryTimeoutInterceptor(queryTimeout=20000)" /> ##单位:秒,默认不开启timeout 参数
我们只需要在Resource配置中增加一个jdbcInterceptors即可,具体配置参见【tomcat-pool】
相关推荐
一个非常简单的命令行实用程序,它可以等待直到指定的JDBC连接可以访问或等待时间超时。 动机 假设您要使用数据库(oracle)启动docker容器,同时您要使用tomcat启动另一个容器,该容器的数据源正在使用oracle容器...
这是一个图书管理系统,运用了,JDBC MySql GUI(图形化界面) I/O,...图借阅管理(图书借阅与归还),基础信息维护(图书类别,读者类别设置,和(超时归还时间)罚金),用户管理(修改密码,删除用户,添加用户)。
在登录控制器中设置cookie名称和会话超时时间。 在SQLHandler和QueryHandler类中设置表名称和数据库名称。 表结构 权限表 列 “电子邮件”-varchar(255) “表名”-varchar(255) “插入”-布尔值 “读取”-...
当发向某个MySQL后台的的并发查询超过某个阈值时,会进行超时等待,直到有可用的连接,其中阈值与超时等待的时间都已经参数化,可以动态配置 set backend offline不再显示节点状态 支持set ...
第一,配制数据源 在Tomcat_home\conf\Catalina\localhost\目录下创建数据源连接文件 文件名: 工程名.xml ... maxWait="-1" //最大连接等待时间。如果超时将接到异常。设-1表示 无限制。 /> </Context>
该草案获得JSR-317专家组全部通过 新增了大量的特性包括类型安全的动态查询(Criteria API );...标准的二级缓存,标准的 JDBC properties ,指定超时时间等等; 目前hibernate 3.5 已经提供了jpa2.0的全部实现;
#连接超时时间阀值,获取连接时,超出阀值时间,则获取失败,毫秒为单位 bonecp.connectionTimeout = 10000 #连接池助手线程数量,可设置为0,该参数会降低运行速度,但程序有大量连接时,有助于提升高并发程序的...
proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回 收,超时的销毁 --> <house-keeping-sleep-time>90000</house-keeping-sleep-time> - <!-- 指因未有空闲连接可以分配而在队列中...
driveClassName:JDBC驱动类的完整的名称; maxActive:同时能够从连接池中被分配的可用实例的最大数;...maxWait:最大超时时间,以毫秒计; password:用户密码; url:到JDBC的URL连接; user:用户名称;
-- 配置获取连接等待超时的时间 --> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <!-- 打开PSCache,...
17.1.13 设置查询附属事项 17.1.14 在映射文件中定义命名查询语句 17.1.15 在HQL查询语句中调用函数 17.2 设定查询条件 17.2.1 比较运算 17.2.2 范围运算 17.2.3 字符串模式匹配 17.2.4 逻辑运算 ...
17.1.13 设置查询附属事项 17.1.14 在映射文件中定义命名查询语句 17.1.15 在HQL查询语句中调用函数 17.2 设定查询条件 17.2.1 比较运算 17.2.2 范围运算 17.2.3 字符串模式匹配 17.2.4 逻辑运算 ...
17.1.13 设置查询附属事项 17.1.14 在映射文件中定义命名查询语句 17.1.15 在HQL查询语句中调用函数 17.2 设定查询条件 17.2.1 比较运算 17.2.2 范围运算 17.2.3 字符串模式匹配 17.2.4 逻辑运算 ...
17.1.13 设置查询附属事项 17.1.14 在映射文件中定义命名查询语句 17.1.15 在HQL查询语句中调用函数 17.2 设定查询条件 17.2.1 比较运算 17.2.2 范围运算 17.2.3 字符串模式匹配 17.2.4 逻辑运算 ...
支持配置 Coprocessor 请求的超时时间 心跳包携带时间戳 支持在线修改 RocksDB 的一些参数,包括 `block-cache-size` 大小等 支持配置 Coprocessor 遇到某些错误时的行为 支持以导数据模式启动,减少导数据过程...
# 连接超时时间,默认30000(30秒) connection-timeout: 30000 # 测试连接是否可用的查询语句 connection-test-query: SELECT 1 #Mybatis-plus配置 mybatis-plus: #配置Mapper.xml映射文件 mapper-locations...
(2)打开tomcat/conf/web.xml文件 ,找到 <session-timeout>30</session-timeout> 一行, 把30改成 1-5的数(作用设置是session超时时间,用于扑捉用户直接关闭浏览器时的下 线状态) 完成以上两步后打开tomcat即可在...
#连接超时时间阀值,获取连接时,超出阀值时间,则获取失败,毫秒为单位 bonecp.connectionTimeout = 10000 #连接池助手线程数量,可设置为0,该参数会降低运行速度,但程序有大量连接时,有助于提升高并发程序的...