druid连接池的问题connection holder is null 问题求解

来源:本网整理

数据库连接池,怎么设置一个连接查询超时时间这个提示有时候你需要回收一下。给你几个可能性吧:首先你做一个调试方法:做一下异常处理try catch finally 然后解决方案:1、把conn.close()关一下,或conn.dispose()就行了。2、dr要记得随时关了www.zgxue.com防采集请勿采集本网。

各位大神,请教一个问题  @wenshao

这个包应该是 笔者自己创建获取bean的包 实际dataSource 来自 applicationContext里面的dataSource 所以你也可以自定义获取dataSource 方法 通过applicationContext获取datasource

druid配置如下

Connection conn=null;Statement st=null;try { String url=\"jdbc:jtds:sqlserver:/127.0.0.1:1433/wh123;加载数据库驱动 Class.forName(\"net.sourceforge.jtds.jdbc.Driver\");通过驱动管理器来得到连接,

 

JDBC连接数据库 创建一个以JDBC连接数据库的程序,包含7个步骤: 1、加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的

#连接池建立时创建的初始化连接数

连接池最大使用连接数量-> 连接池最小空闲-> 获取连接最大等待时间-> property name=\"maxPoolPreparedStatementPerConnectionSize\"value=\"33

initialSize = 3

给你一个连接的方法,可以自己修改,因为不太明白你的问题!SqlConnection conn=new SqlConnection(\"Data Source=12515-06(机器名);Database=Login(数据库名);Integrated Security=True\");

#连接池中最大的活跃连接数

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

 

JDBC连接数据库 创建一个以JDBC连接数据库的程序,包含7个步骤: 1、加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的

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

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)

 

JDBC连接数据库 创建一个以JDBC连接数据库的程序,包含7个步骤: 1、加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lang.Class类的

连接池的方法

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 关闭异常..");

   }

  }

 }

}

 

举个例子连接数据库查询表的相关语句:Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");Connection conn=DriverManager.getConnection("jdbc:microsoft:sqlserver:/127.0.0.1:1433;DatabaseName=mytest内容来自www.zgxue.com请勿采集。

免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
Copyright © 2017 www.zgxue.com All Rights Reserved