java框架的超时设置

    代码中对超时的处理太重要了,如果不处理会造成程序卡住,在weblogic中会形成stuck线程,非常可能导致整个节点缓慢。下面来展示下原生的JDBC代码超时设置:

package gg;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class TestReadBlob{
    Connection con = null;
    PreparedStatement pre = null;
    ResultSet result = null;
    public void runTest() {
    	   try{
    	        Class.forName("oracle.jdbc.driver.OracleDriver");
    	        String url = "jdbc:oracle:thin:@10.11.15.18:1521:orcl";
    	        String user = "SD_DEV";
    	        String password = "SD_DEV";
    	        con = DriverManager.getConnection(url, user, password);
    	        String sql = "select * from student where id=? for update";
    	        pre = con.prepareStatement(sql);
    	        pre.setInt(1, 1);
    	        pre.setQueryTimeout(5);//单位是秒
    	        result = pre.executeQuery();
    	        while (result.next())
    	            System.out.println("学号:" + result.getInt("id") + "姓名:"
    	                    + result.getString("name"));
    	    }
    	    catch (Exception e)
    	    {
    	        e.printStackTrace();
    	    }
    	    finally
    	    {
    	        try{
    	            if (result != null)
    	                result.close();
    	            if (pre != null)
    	                pre.close();
    	            if (con != null)
    	                con.close();
    	            System.out.println("数据库连接已关闭!");
    	        }
    	        catch (Exception e){
    	            e.printStackTrace();
    	        }
    	    }
    }
    public static void main(String[] args) {
    	TestReadBlob testReadBlob = new TestReadBlob();
    	testReadBlob.runTest();
    }
 }

java.sql.SQLTimeoutException: ORA-01013: 用户请求取消当前的操作
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:884)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1167)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1281)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3594)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3638)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1495)
at gg.TestReadBlob.runTest(TestReadBlob.java:24)
at gg.TestReadBlob.main(TestReadBlob.java:51)
数据库连接已关闭!


mybatis设置:

全局设置,在mybatis配置文件的settings节点中,增加如下配置
<settings>  
<setting name="defaultStatementTimeout" value="25"/>  
</settings>  
单独配置
<select 
  id="queryEvaluateAuditCount" 
  resultType="int"  
  parameterType="com.safety.accidentevent.dto.query.AccidentEvaluateQueryDTO"
  timeout="20"
>

weblogic设置:

数据源文件jdbc-driver-params中配置

单位是ms
<property>
 <name>oracle.jdbc.ReadTimeout</name>
 <value>18000</value>
</property>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值