`
QING____
  • 浏览: 2253415 次
  • 性别: 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超时机制完整版

    当网络出现问题时,如未设置socket timeout,JDBC连接可能会被长时间阻塞,类似于HttpClient未设置超时的情况。因此,设置合理的socket timeout至关重要,以防止CPU资源过度消耗和应用失去响应。 在应用与数据库间...

    java超时控制

    JDBC的`Statement`对象有一个`setQueryTimeout()`方法,可以设定SQL查询的超时时间。当查询超过这个时间,JDBC驱动会抛出`SQLException`。 7. **FutureTask超时** `FutureTask`类也支持超时控制,通过`FutureTask...

    MySQL JDBC配置参数

    设置合理的超时时间可以避免因验证查询过长而导致的问题。 综上所述,这些MySQL JDBC配置参数对于优化数据库连接管理和提高应用程序性能至关重要。开发者应根据实际应用场景和系统负载情况合理调整这些参数的值,以...

    jdbc连接池配置(优化连接速度)

    每种连接池都有各自的配置参数,例如最小连接数、最大连接数、超时时间、测试连接SQL等。合理设置这些参数可以有效控制连接的创建和销毁,平衡资源使用和响应速度。 例如,HikariCP以其高性能著称,其关键配置参数...

    使用jdbc动态连接数据库

    - `setLoginTimeout(int seconds)`:设置登录超时时间。 ##### 2. Connection `Connection`接口表示一个到数据库的实际连接,所有针对数据库的操作都是基于这个连接进行的。`Connection`的一些常用方法包括: - `...

    尚硅谷jdbc视频教程

    1. **连接超时**:检查网络连接是否正常,同时调整连接超时时间。 2. **SQL语法错误**:仔细检查SQL语句,确保没有语法错误。 3. **驱动版本不兼容**:确认使用的JDBC驱动版本与数据库服务器版本相匹配。 4. **性能...

    jdbc jar包

    - 适当设置连接、读取超时,防止程序无响应。 总结,JDBC Jar包是Java开发与数据库交互的基础,通过其提供的API,我们可以轻松地实现对各种数据库的操作。熟练掌握JDBC技术,对于Java后端开发来说至关重要。

    jdbc线程池演示demo

    2. 配置C3P0:创建一个配置文件(如c3p0-config.xml),配置数据库连接的相关参数,如最大连接数、最小连接数、初始连接数、获取连接超时时间等。 ```xml &lt;class-name&gt;...

    sqljdbc4.0-4.2.zip

    8. 配置参数:SQLJDBC驱动支持多种配置参数,例如连接超时、查询超时、自动提交等,可以通过设置`Properties`对象并传递给`DriverManager.getConnection()`方法来配置。 9. 安全性:使用最新的SQLJDBC版本可以确保...

    sql server驱动sqljdbc.jar和sqljdbc4.jar

    - 合理配置数据库连接的超时时间和最大空闲时间。 总的来说,sqljdbc.jar和sqljdbc4.jar是Java开发者连接SQL Server不可或缺的工具,选择合适的版本能确保你的应用能够高效、稳定地与数据库进行交互。理解它们的...

    各种数据库的jdbc驱动

    - 适当设置JDBC配置参数,如批处理大小、超时时间等。 总结起来,这个压缩包提供的各种数据库JDBC驱动是开发过程中不可或缺的工具,它们简化了Java应用与数据库之间的交互,使得跨数据库平台的开发变得更加便捷。...

    Mysql JDBC Url参数说明

    6. **connectTimeout**: 设置连接超时时间(毫秒)。 ```text jdbc:mysql://localhost:3306/mydb?connectTimeout=10000 ``` 7. **useAffectedRows**: 是否返回实际受影响的行数,而不是插入ID(对于`INSERT`...

    Oracle JDBC连接字符串

    3. **性能优化**:合理设置连接池大小、超时时间等参数,以提高应用程序的整体性能。 4. **安全性**:不要硬编码用户名和密码到代码中,考虑使用环境变量或者安全存储解决方案来管理敏感信息。 通过以上内容的详细...

    JDBC数据源连接池的配置和使用示例

    1. 调整连接池参数:根据应用的并发量和数据库性能,合理设置连接池的最大连接数、最小连接数、超时时间等。 2. 使用PreparedStatement:减少SQL解析次数,提高执行效率。 3. 关闭不必要的结果集和连接:使用`try-...

    驱动程序jdbc_4.2

    5. 适当地设置超时和重试策略,避免长时间阻塞。 通过理解并熟练运用JDBC 4.2提供的新特性和最佳实践,开发者可以编写出高效、健壮的Java数据库应用。在实际项目中,结合数据库厂商的特定驱动,可以进一步提升应用...

    oracle.jdbc.driver.oracledriver Oracle JDBC驱动包 ojdbc6

    同时,合理设置连接池大小和超时时间,避免资源浪费。 - **错误处理**:正确捕获和处理异常,确保应用程序的健壮性。 总之,Oracle JDBC驱动包,特别是ojdbc6版本,对于Java开发者来说是连接和操作Oracle数据库不可...

    JDBC MSSQL2008 驱动

    - 合理设置JDBC连接参数,如超时时间、最大连接数等。 - 注意数据库设计和索引的优化,减少不必要的数据操作。 综上,JDBC MSSQL2008驱动是Java连接SQL Server 2008数据库的基础,理解和掌握其使用方法对于Java...

    Tongweb5中配置JDBC连接池

    选择合适的连接池,并配置相应的参数,如最大连接数、最小连接数、超时时间等。例如,如果使用C3P0,可以在`context.xml`中添加以下配置: ```xml &lt;Resource name="jdbc/MyDB" auth="Container" type=...

    JDBCDemo.rar

    使用C3P0,开发者需要配置相关的参数,如初始化连接数、最大连接数、超时时间等。 **DBCP连接池** Apache DBCP(Database Connection Pool)是Apache组织提供的一个开源数据库连接池组件,它是基于Jakarta-pool...

    jdbc4文档PDF版

    `Statement`对象现在支持定时关闭,避免了内存泄漏,并且可以设置最大执行时间,防止长时间运行的查询。 10. **更好的事务管理** JDBC4提供了更细粒度的事务控制,如保存点,允许在事务中进行部分回滚,提高了...

Global site tag (gtag.js) - Google Analytics