} } }

    关于No ManagedConnections available within configure

    添加时间:2013-6-25 点击量:

      比来因为体系和营业重构须要,须要把线上1亿数据迁徙到新库,因为营业变革,新表老表布局有变更,没法直接用dba dump的体式格式,须要本身写转换法度迁徙。今天在调试的时辰,碰着一个蛋疼的题目,就是一开端查询数据都正常,然则查询几条后日记就会报超时错误,具体日记如下:



    No ManagedConnections available within configured blocking timeout ( 5000 [ms] ); - nested throwable: (javax.resource.ResourceException: No ManagedConnections available within configured blocking timeout ( 5000 [ms] ))


      搜了下这个错误,各类说法斗劲多,然则感触感染都没说到点上,找DBA看了下,DBA直接默示这个库连接数一向吃紧,从这个错误看也是连接超时,底本认为就这么着了,然则调试了几次都是一开端正常,后来报异常,就感触感染必然还是代码有题目导致连接数吃紧,后来细心看了下代码,发明是connection没有封闭...应当说是没有封闭全。把PrepareStatement和ResultSet封闭了,然则没把最首要的Connection封闭掉...封闭了Connection就正常了。


      网上几个搜的成果太过于误导人,所以就记录一下,碰着这个错误,起首是确认本身代码是否有相干connection没封闭掉,根蒂根基都是没封闭connection导致的,最后再确认数据库连接数是不是真的吃紧。


      如下代码仅供参考:



     1         try{
    
    2 conn = sourceDs.getConnection();
    3 ps = conn.prepareStatement(TcBizOrder);
    4 rs = ps.executeQuery();
    5 if(rs.next()){
    6 result.put(auction_id, rs.getLong(auction_id));
    7 result.put(logistics_status, rs.getInt(logistics_status));
    8 result.put(attributes, rs.getString(attributes));
    9 return result;
    10 }else{
    11 return null;
    12 }
    13 }catch(SQLException e){
    14 LogFactory.getTaskLog().error([ tc_biz_order SQLException], bizOrderId=+bizOrderId, e);
    15 return null;
    16 }catch(Exception e){
    17 LogFactory.getTaskLog().error([ tc_biz_order other Exception], bizOrderId=+bizOrderId, e);
    18 return null;
    19 }finally{
    20 if(rs != null){
    21 try{
    22 rs.close();
    23 }catch(SQLException e){
    24 LogFactory.getTaskLog().error([close ResultSet SQLException], bizOrderId=+bizOrderId, e);
    25 }
    26 }
    27
    28 if(ps != null){
    29 try {
    30 ps.close();
    31 } catch (SQLException e) {
    32 LogFactory.getTaskLog().error([close PreparedStatement SQLException], bizOrderId=+bizOrderId, e);
    33 }
    34 }
    35
    36 if(conn != null){
    37 try{
    38 conn.close();
    39 }catch(SQLException e){
    40 LogFactory.getTaskLog().error([close Connection SQLException], bizOrderId=+bizOrderId, e);
    41 }
    42 }
    43 }


    读书,不要想着实用,更不要有功利心。读书只为了自身的修养。邂逅一本好书如同邂逅一位知己,邂逅一个完美之人。有时心生敬意,有时怦然心动。仿佛你心底埋藏多年的话,作者替你说了出来,你们在时光深处倾心相遇的一瞬间,情投意合,心旷神怡。
    分享到: