最近有空将之前学习的内容进行一下总结。发现以前一些旧的东西发生了一些变化。
最近在连接搭建数据库,之前一直使用MySQL和Tomcat自带的数据库连接池进行学习(过一段时间在进行整理),但是现在想用一些其他的连接池进行关联,首先在网上查找了一些常用的连接池。例如:C3P0,Proxool,BoneCP等等(以后有空都进行一下尝试)。
本次首先以C3P0进行试验。
C3P0是什么?是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。
如何配置C3P0呢。
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/javaspringdb?useSSL=false;serverTimezone=UTC</property>
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">19950609gxc</property>
<property name="checkoutTimeout">30000</property>
<property name="idleConnectionTestPeriod">30</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">20</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</default-config>
</c3p0-config>
以上是C3P0的配置文件,配置文件必须要放在src文件夹下
By default, c3p0 will look for an XML configuration file in its classloader's resource path under the name "/c3p0-config.xml". That means the XML file should be placed in a directly or jar file directly named in your applications CLASSPATH, in WEB-INF/classes, or some similar location . If you prefer not to bundle your configuration with your code, you can specify an ordinary filesystem location for c3p0's configuration file via the system property com.mchange.v2.c3p0.cfg.xml.
意思是配置文件必须放在classpath路径中,在web环境下就是classes
现在开始说明本次尝试遇到的各种问题:
产生这个问题的使用的jar如下:
JDBC:mysql-connector-java-5.1.39-bin.jar
c3p0-0.9.5.2.jar
mchange-commons-java-0.2.11.jar
后面的两个jar包是C3P0使用的jar包,开始运行结果的图片如下:
产生上述问题的原因是因为调用了低版本的jdbc。(Mysql和mysql-connector都为8.0以上的版本时,连接驱动需要从com.mysql.jdbc.Driver了修改为com.mysql.cj.jdbc.Driver)
将上诉的jdbc换为mysql-connector-java-8.0.13.jar
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/javaspringdb?useSSL=false;serverTimezone=UTC</property>
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">19950609gxc</property>
<property name="checkoutTimeout">30000</property>
<property name="idleConnectionTestPeriod">30</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">20</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</default-config>
</c3p0-config>
配置文件该为如上图:(再次运行)
配置完之后产生上述的问题,主要的原因在于配置文件的写的有问题,之前查找了一些资料,但是配置c3p0的配置不同,造成配置文件写成上面那样,主要的原因是因为在MySQL8.0的时候需要一个版本与数据相接近的jdbc。当将jdbc换到与数据库相接近的时候,在将配置文件改为下图:
JDBC:mysql-connector-java-8.0.11.jar
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/javaspringdb</property>
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">19950609gxc</property>
<property name="checkoutTimeout">30000</property>
<property name="idleConnectionTestPeriod">30</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">20</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</default-config>
</c3p0-config>
运行结果如下:
此结果已经说明可以与数据库进行相连了。
(待完善)