Having failed to acquire a resource, com.mchange.v2.resourcepool.BasicResourcePool@15bbf42f is inter

目录结构如下:
在这里插入图片描述
测试代码如下:

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class C3P0Demo {
    public static void main(String[] args) throws SQLException {

        DataSource dataSource = new ComboPooledDataSource();

        Connection conn = dataSource.getConnection();
        System.out.println(conn);
    }
}

执行代码后出异常:
警告: Having failed to acquire a resource, com.mchange.v2.resourcepool.BasicResourcePool@15bbf42f is interrupting all Threads waiting on a resource to check out. Will try again in response to new client requests.
Exception in thread “main” java.sql.SQLException: Connections could not be acquired from the underlying database!
at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:118)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:692)
at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:140)
at c3p0.C3P0Demo.main(C3P0Demo.java:14)


在网上找了找原因,无非就以下几种:
  • 密码、帐号、URL有误
  • 数据库未启动或无权访问
  • mysql-connector-java-xxxx-bin.jar版本问题
  • 防火墙问题
  • c3p0-config.xml 或者 c3p0.properties 要放在src目录下

但是,经过我排查之后,以上问题都不存在,问题在这:

 DataSource dataSource = new ComboPooledDataSource();

上面是我使用的空参构造,空参构造意味着使用“c3p0-config.xml”配置文件中的默认配置,而“c3p0-config.xml”中的配置代码如下:

<c3p0-config>
  
  <!--默认配置-->
    <default-config>

        <property name="initialPoolSize">5</property>  
		
        <property name="maxIdleTime">60</property>  
		
        <property name="maxPoolSize">100</property>  
		
        <property name="minPoolSize">10</property>  
		
    </default-config>  
  
    <named-config name="mysql">
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/db?characterEncoding=UTF-8</property>
        <property name="user">root</property>
        <property name="password">1234</property>
        <property name="initialPoolSize">10</property>
        <property name="maxIdleTime">30</property>
        <property name="maxPoolSize">100</property>
        <property name="minPoolSize">10</property>
    </named-config>
</c3p0-config>

可发现在默认配置“default-config”中并没有配置driverClass、url、user、password,我们只需要将缺失的配置信息加入到“default-config”,或者构造对象时指定参数:
DataSource dataSource = new ComboPooledDataSource(“mysql”);

一定要好好检查配置文件!!!

  • 21
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值