`
QING____
  • 浏览: 2232225 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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等。

 

<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-avail-wait:简单的Java命令行应用程序(将在shell脚本中使用),等待指定的JDBC URL(用户名和密码)可用

    一个非常简单的命令行实用程序,它可以等待直到指定的JDBC连接可以访问或等待时间超时。 动机 假设您要使用数据库(oracle)启动docker容器,同时您要使用tomcat启动另一个容器,该容器的数据源正在使用oracle容器...

    GUI图书馆项目(老二次元了)

    这是一个图书管理系统,运用了,JDBC MySql GUI(图形化界面) I/O,...图借阅管理(图书借阅与归还),基础信息维护(图书类别,读者类别设置,和(超时归还时间)罚金),用户管理(修改密码,删除用户,添加用户)。

    DBVisualizer

    在登录控制器中设置cookie名称和会话超时时间。 在SQLHandler和QueryHandler类中设置表名称和数据库名称。 表结构 权限表 列 “电子邮件”-varchar(255) “表名”-varchar(255) “插入”-布尔值 “读取”-...

    基于MySQL的数据库中间件Meituan-DBProxy.zip

    当发向某个MySQL后台的的并发查询超过某个阈值时,会进行超时等待,直到有可用的连接,其中阈值与超时等待的时间都已经参数化,可以动态配置 set backend offline不再显示节点状态 支持set ...

    Tomcat中配置数据源连接池

    第一,配制数据源 在Tomcat_home\conf\Catalina\localhost\目录下创建数据源连接文件 文件名: 工程名.xml ... maxWait="-1" //最大连接等待时间。如果超时将接到异常。设-1表示 无限制。 /&gt; &lt;/Context&gt;

    jpa2.0(JSR-317) 规范 包含javadoc

    该草案获得JSR-317专家组全部通过 新增了大量的特性包括类型安全的动态查询(Criteria API );...标准的二级缓存,标准的 JDBC properties ,指定超时时间等等; 目前hibernate 3.5 已经提供了jpa2.0的全部实现;

    bonecp连接池

    #连接超时时间阀值,获取连接时,超出阀值时间,则获取失败,毫秒为单位 bonecp.connectionTimeout = 10000 #连接池助手线程数量,可设置为0,该参数会降低运行速度,但程序有大量连接时,有助于提升高并发程序的...

    proxool连接池配置

    proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回 收,超时的销毁 --&gt; &lt;house-keeping-sleep-time&gt;90000&lt;/house-keeping-sleep-time&gt; - &lt;!-- 指因未有空闲连接可以分配而在队列中...

    Tomcat配置jsp连接mysql的连接池方法

    driveClassName:JDBC驱动类的完整的名称; maxActive:同时能够从连接池中被分配的可用实例的最大数;...maxWait:最大超时时间,以毫秒计; password:用户密码; url:到JDBC的URL连接; user:用户名称;

    一个整合ssm框架的实例

    -- 配置获取连接等待超时的时间 --&gt; &lt;!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --&gt; &lt;!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --&gt; &lt;!-- 打开PSCache,...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     17.1.13 设置查询附属事项  17.1.14 在映射文件中定义命名查询语句  17.1.15 在HQL查询语句中调用函数  17.2 设定查询条件  17.2.1 比较运算  17.2.2 范围运算  17.2.3 字符串模式匹配  17.2.4 逻辑运算  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     17.1.13 设置查询附属事项  17.1.14 在映射文件中定义命名查询语句  17.1.15 在HQL查询语句中调用函数  17.2 设定查询条件  17.2.1 比较运算  17.2.2 范围运算  17.2.3 字符串模式匹配  17.2.4 逻辑运算  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     17.1.13 设置查询附属事项  17.1.14 在映射文件中定义命名查询语句  17.1.15 在HQL查询语句中调用函数  17.2 设定查询条件  17.2.1 比较运算  17.2.2 范围运算  17.2.3 字符串模式匹配  17.2.4 逻辑运算  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     17.1.13 设置查询附属事项  17.1.14 在映射文件中定义命名查询语句  17.1.15 在HQL查询语句中调用函数  17.2 设定查询条件  17.2.1 比较运算  17.2.2 范围运算  17.2.3 字符串模式匹配  17.2.4 逻辑运算  ...

    03开源NewSql数据库TiDB-Deep Dive into TiDB

    支持配置 Coprocessor 请求的超时时间 心跳包携带时间戳 支持在线修改 RocksDB 的一些参数,包括 `block-cache-size` 大小等 支持配置 Coprocessor 遇到某些错误时的行为 支持以导数据模式启动,减少导数据过程...

    java高并发秒杀系统.rar

    # 连接超时时间,默认30000(30秒) connection-timeout: 30000 # 测试连接是否可用的查询语句 connection-test-query: SELECT 1 #Mybatis-plus配置 mybatis-plus: #配置Mapper.xml映射文件 mapper-locations...

    新版JSP+JQUERY+AJAX+Mysql聊天室小程序JASChatWeb1.0

    (2)打开tomcat/conf/web.xml文件 ,找到 &lt;session-timeout&gt;30&lt;/session-timeout&gt; 一行, 把30改成 1-5的数(作用设置是session超时时间,用于扑捉用户直接关闭浏览器时的下 线状态) 完成以上两步后打开tomcat即可在...

    Spring3中配置DBCP,C3P0,Proxool,Bonecp数据源

    #连接超时时间阀值,获取连接时,超出阀值时间,则获取失败,毫秒为单位 bonecp.connectionTimeout = 10000 #连接池助手线程数量,可设置为0,该参数会降低运行速度,但程序有大量连接时,有助于提升高并发程序的...

Global site tag (gtag.js) - Google Analytics