【问题标题】:DBCP Stop Working with no ExceptionDBCP 无异常停止工作
【发布时间】:2012-08-24 05:34:07
【问题描述】:

我对 Apache Commons DBCP 有疑问。 池工作,但在随机时间(小时)之前,这会停止循环。 我有 Java 线程,其中一个以 15 秒的睡眠时间连接到数据库。 这个线程,在随机时间停止工作之前,但没有被杀死,并且在无限循环中暂停等待连接。

这是我的 DBCP 配置的附件:

    BasicDataSource basicDataSource = new BasicDataSource();
    basicDataSource.setDriverClassName(_configuracion.getClassName());
    basicDataSource.setUsername(_configuracion.getUser());
    basicDataSource.setPassword(_configuracion.getPassword());
    basicDataSource.setUrl("jdbc:mysql://" + _configuracion.getSocket() + "/" +     
    _configuracion.getNombreBd());

    basicDataSource.setValidationQuery("SELECT 1");
    basicDataSource.setTestOnBorrow(true);
    basicDataSource.setTestWhileIdle(true);
    basicDataSource.setTestOnReturn(false);
    basicDataSource.setTimeBetweenEvictionRunsMillis(1000 * 60 * 15);
    basicDataSource.setMinEvictableIdleTimeMillis(1000 * 60 * 2);
    basicDataSource.setNumTestsPerEvictionRun(10);

    basicDataSource.setRemoveAbandoned(true);
    basicDataSource.setRemoveAbandonedTimeout(60 * 60);


    _dataSource = basicDataSource;

_dataSource 属性是我的数据库类的静态属性,该类是为线程调用的。

private static DataSource _dataSource;

我不知道我的 DBCP 配置是否有问题。

请帮帮我!

编辑:这是使用 DataSource 的代码。

public CachedRowSet query(String sql) {

CachedRowSet datos = null;
Connection con;
ResultSet rs;
try {
    con = _dataSource.getConnection();
    Statement sentencia = con.createStatement();
    rs = sentencia.executeQuery(sql);

    datos = new CachedRowSetImpl();
    datos.populate(rs);
    rs.close();
    sentencia.close();
    con.close();



 } catch (Exception ex) {
    System.out.println("Error: " + ex.getMessage());
 }

return datos;

}

我发现在 DBCP Pool Stop Working 之前,它有一个 SQL Exception,这个 Exception 被捕获,但是 Pool Stop Working。

【问题讨论】:

  • 您也应该发布实际使用数据源的代码。

标签: multithreading connection-pooling apache-commons infinite-loop apache-commons-dbcp


【解决方案1】:

试试 使用最新的 jar (commons-dbcp-1.4) 使用 setValidationQueryTimeout

为您的 sql 查询设置查询超时。

【讨论】:

    猜你喜欢
    • 2011-08-07
    • 1970-01-01
    • 2019-10-18
    • 2019-11-10
    • 2010-12-29
    • 2016-01-01
    • 2018-09-19
    • 2016-09-07
    • 1970-01-01
    相关资源
    最近更新 更多