CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory

写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。

这博客是对自己学习的一点点总结及记录,如果您对 Java算法 感兴趣,可以关注我的动态,我们一起学习。

用知识改变命运,让我们的家人过上更好的生活


如果你也遇到了这个错误,希望你画两分钟时间看完这篇博客。说不定对你解决错误有帮助。

文章目录

      • 错误
      • 错误分析
      • 总结解决办法

错误

今天在使用c3p0连接池连接数据库时遇到了错误遇到这样一个问题,执行方法的方法的时候特别慢,最后还报了一大堆错误,以下是报错信息截图。

在这里插入图片描述
主要错误是:
CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory

错误分析

首先检查配置文件是不是放错位置了,发现配置文件就是在src/main/resources下面,又怀疑里面的用户名、密码、数据库名是不是写错了,发现也没有。接着又检查是不是引入了驱动,发现正常引入。

既然引入了驱动那是不是版本有问题,修改驱动包版本和数据库版本一致,结果无济于事。下面是我配置数据源的信息:

<!-- 配置数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
	<!-- 连接数据库的信息 -->
   	<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
    <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/spring_study?characterEncoding=UTF8"></property>
    <property name="user" value="root"></property>
    <property name="password" value="root"></property>
</bean>

CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory_第1张图片
最后修改url,在后面加了下面的代码,惊奇的发现解决了问题。

?useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC&amp;characterEncoding=UTF8

CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory_第2张图片

总结解决办法

(1)书写配置文件的时候要特别细心,如果多一个空格也有可能报错。注意:name 必须是小写,jdbcUrl的U必须大写

(2)项目未引入对应的驱动jar包 mysql-connector-java-xxx-bin.jar

(3)驱动配置有误,应该是 com.mysql.jdbc.Driver

(4)数据库连接地址有误,应该是 jdbc:mysql://localhost:3306/spring_study?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&characterEncoding=UTF8(这里我以我的项目为准,仅供参考)

(5)数据库密码或帐号有误

(6)配置文件没有放到src的根目录下

(7)驱动包和自己电脑安装的mysql版本不一致(这个也有可能会报错)

(8)网上说的数据库未启动或无权访问这个一般不会出现

你可能感兴趣的:(常见错误)