您的位置:首页 > 博客中心 > 数据库 >

在Spring中基于JDBC进行数据访问时如何控制超时

时间:2022-03-14 09:07

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <!-- 设置毫秒单位的阻塞超时 -->
        <property name="connectionProperties" value="oracle.net.READ_TIMEOUT=1000"/>  


        <!-- 其他属性设置... -->
</bean>

如果同时有多个属性要设置,在value中通过分号分隔。其他数据库的设置方式参见资料3。

超时捕获
在Transaction timeout设置生效的情况下,发生超时后,框架将主动回滚当前事务并抛出UncategorizedSQLException。这是一个RuntimeException的子类,通过其getSql()或getMessage()方法可以得知引发超时的sql语句。
在使用JDBC Driver Socket阻塞超设置时,发生超时后,当前连接将被driver关闭,事务中正在执行的操作,不论是通过JdbcTemplate还是其他ORM框架执行的,都将引发SQLException(异常信息为:关闭的连接),这个异常将被上层的TransactionInterceptor捕获并被重新包装成一个UncategorizedSQLException的实例,随后回滚事务,但由于连接已关闭,因此又会引发回滚异常,所以会看到
“TransactionInterceptor.completeTransactionAfterThrowing (TransactionAspectSupport.java:414)
Application exception overridden by rollback exception ”
最终,会向调用者抛出一个TransactionSystemException的实例,通过其getApplicationException()方法可以获得被覆盖前的那个UncategorizedSQLException的实例。

参考资料
1. 
2. 
3. 
4. 

在Spring中基于JDBC进行数据访问时如何控制超时,布布扣,bubuko.com

热门排行

今日推荐

热门手游