• 《阿古顿巴》藏语版在藏语卫视首播 2019-09-06
  • 晋中市“三同步”推动互联网治理创新 2019-08-27
  • 法媒:研究称美国人常用药物或增加抑郁风险 2019-08-27
  • 宝贝是地名,你能想到这么浪漫的地名在哪儿吗? 2019-08-15
  • 何树山副省长到方圆机电调研指导工作 2019-08-15
  • 江苏快三历史开奖结果查询结果:druid连接池的问题connection holder is null 问题求解

    来源:本网整理

    彩票双色球历史开奖结果 www.s9h6.com 各位大神,请教一个问题  @wenshao

    druid配置如下

     

    #连接池建立时创建的初始化连接数
    initialSize = 3
    #连接池中最大的活跃连接数
    maxActive = 10
    #连接池中最小的活跃连接数
    minIdle = 3
    #获取连接等待时间ms
    maxWait = 60000
    #检测连接时间  10分钟
    timeBetweenEvictionRunsMillis = 600000
    #检测未关闭连接大于该值时,则关闭连接  10分钟
    minEvictableIdleTimeMillis = 600000
    #验证语句
    validationQuery = SELECT 1 FROM DUAL
    testWhileIdle = true
    #从连接池获取连接时,是否检测连接可用性
    testOnBorrow = false
    #释放连接到连接池时,是否检测连接可用性
    testOnReturn = false
    #开启psCache缓存
    poolPreparedStatements = true
    #psCache缓存 100
    maxOpenPreparedStatements=100
    maxPoolPreparedStatementPerConnectionSize = 50
    filters =stat

    #对于建立连接过长的连接强制关闭 
    removeAbandoned=true 
    #如果连接建立时间超过了30分钟,则强制将其关闭 
    removeAbandonedTimeout=1800
    #将当前关闭动作记录到日志 
    logAbandoned=true

     

    执行后会报异常,但是又不是每次都报,出现的频率还蛮高的

    java.sql.SQLException: connection holder is null
            at com.alibaba.druid.pool.DruidPooledConnection.checkState(DruidPooledConnection.java:1085)
            at com.alibaba.druid.pool.DruidPooledConnection.commit(DruidPooledConnection.java:705)
            at com.xwtec.baseDao.JdbcTemplate.excuteBatch(JdbcTemplate.java:62)
            at com.xwtec.dao.impl.LoadNewsInfoDAOImpl.batchAddNews(LoadNewsInfoDAOImpl.java:44)
            at com.xwtec.service.impl.LoadNewsInfoServiceImpl.loadNewsInfoList(LoadNewsInfoServiceImpl.java:132)
            at com.xwtec.job.LoadNewsJob$1.run(LoadNewsJob.java:49)
            at java.util.TimerThread.mainLoop(Timer.java:512)
            at java.util.TimerThread.run(Timer.java:462)

     

    连接池的方法

    public class DruidPoolUtils {
     
     private static DataSource ds = null;
     
     private static final ThreadLocal<Connection> threadLocal = new ThreadLocal<Connection>();
     
     static {
      try {
       InputStream in = JdbcUtils.class.getClassLoader().getResourceAsStream(
         "druid.properties");
       Properties props = new Properties();
       props.load(in);
       ds = DruidDataSourceFactory.createDataSource(props);
      } catch (Exception ex) {
       ex.printStackTrace();
      }
     }

     /**
      * 获取连接
      * @return
      * @throws Exception
      */
     public synchronized static Connection getConnection() throws SQLException {
      Connection conn = (Connection) threadLocal.get();
      try {
       if (conn == null || conn.isClosed()) {
        conn = ds.getConnection();//使用Druid
        if (conn == null || conn.isClosed()) {
         System.out.println("DruidPoolUtils.getConnection()时发生异常,连接可能已经关闭,再试一次....");
         conn = ds.getConnection();
         System.out.println("DruidPoolUtils.getConnection()时发生异常,连接可能已经关闭,再试一次....conn==" + conn);
        }
        
        conn.setAutoCommit(false);
        threadLocal.set(conn);
       }
      } catch (Exception e) {
       throw new SQLException("数据库访问失败..");
      }
      return conn;
     }

     /**
      * 关闭连接
      * @throws Exception
      */
     public static void closeConnection() throws SQLException {
      Connection conn = (Connection) threadLocal.get();
      if (conn != null && !conn.isClosed()) {
       try {
        conn.close();
       } catch (Exception e) {
        throw new SQLException("关闭数据库连接失败..");
       }
       threadLocal.set(null);
      }
     }

     public static void commit() throws SQLException {
      try {
       getConnection().commit();
      } catch (Exception e) {
       throw new SQLException("数据库提交异常..");
      }
     }

     public static void rollback() throws SQLException{
      try {
       getConnection().rollback();
      } catch (SQLException e) {
       throw new SQLException("数据库回滚异常..");
      }
     }

     public static void close(Statement stmt) throws SQLException {
      if (stmt != null) {
       try {
        stmt.close();
       } catch (SQLException e) {
        throw new SQLException("数据库Statement 关闭异常..");
       }
      }
     }

     public static void close(ResultSet rs) throws SQLException{
      if (rs != null) {
       try {
        rs.close();
       } catch (SQLException e) {
        throw new SQLException("数据库ResultSet 关闭异常..");
       }
      }
     }


    }

     

  • 本文相关:
  • 怎么通过androidpn开发聊天app
  • @JFinal,JFinal扩展IOC应该从哪里入手?
  • Gson把List数据转换成Json数据结果最前面和最后面有[ ] 符号,请问.......(附图)
  • JFinal Weixin怎样接入微信?
  • 关于nutz中json视图日期格式的自定义
  • 微信上的页面需要考虑SEO吗?
  • [{"name":"鱼丸","id":"13","num":"1","price":"6"},{"name":"油菜","id":"12","num":"1","price":"3"}]如何打开
  • 卧槽,用jmeter测试了一下登录接口,CRUD好像都要蛮久的??!
  • rtmp、rtsp协议的支持
  • PHP缓存 远程服务器页面
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 彩票双色球历史开奖结果 - 频道导航
    Copyright © 2017 彩票双色球历史开奖结果 www.s9h6.com All Rights Reserved
  • 《阿古顿巴》藏语版在藏语卫视首播 2019-09-06
  • 晋中市“三同步”推动互联网治理创新 2019-08-27
  • 法媒:研究称美国人常用药物或增加抑郁风险 2019-08-27
  • 宝贝是地名,你能想到这么浪漫的地名在哪儿吗? 2019-08-15
  • 何树山副省长到方圆机电调研指导工作 2019-08-15
  • 七乐彩走势图(带连线) 快3开奖结果 欢乐斗地主银宝箱 广东时时彩几分钟开奖 广西快乐双彩综合走势图 体彩百变王牌 500元 倍投方案 稳赚 福利彩票双色球走势图 快3开奖结果 球彩app 手机上有什么可以赚钱的软件 彩票彩站合买系统 新疆十一选五预测号码今天 广东快乐十分综合走势图表 滚球总进球数怎么算