C3P0是一个开源的Java数据库连接池,用于管理和复用数据库连接,使用C3P0数据库连接池可以有效地管理数据库连接,减少频繁创建和关闭连接的开销,以提高应用程序的性能和可扩展性。它支持JDBC驱动程序,并提供了一些高级功能,如连接池自动回收、连接检测、连接超时等。
它可以在应用程序启动时,创建一定数量的数据库连接,并在需要时将连接分配给应用程序。当应用程序使用完连接后,它可以将连接返回到连接池中进行复用,而不是直接关闭连接。
C3P0还提供了一些高级功能,如连接池自动回收。当数据库连接长时间未使用时,C3P0可以自动回收这些连接,并释放相关资源。此外,C3P0还支持连接检测和连接超时功能,可以检测不可用的连接并将其从连接池中移除。
C3P0的配置相对简单,可以通过配置文件或编程方式进行设置。可以设置连接池的最小连接数、最大连接数、连接超时时间、连接检测时间间隔等参数。
在pom.xml文件中导入对应的依赖:
<dependency>
<groupId>c3p0groupId>
<artifactId>c3p0artifactId>
<version>0.9.1.2version>
dependency>
<dependency>
<groupId>com.mchangegroupId>
<artifactId>c3p0artifactId>
<version>0.9.5.2version>
dependency>
第二步:创建对应的配置文件c3p0-config.xml,注意c3p0配置文件的名字必须为这个,不能自定义,相比于之前的JDBCUtils,c3p0-config.xml的作用即为加载驱动,并且可以配置数据库连接所需的相关信息,那么在真正使用时,我们只需要获取连接对象即可
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.cj.jdbc.Driverproperty>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/book?serverTimezone=UTCproperty>
<property name="user">rootproperty>
<property name="password">112899property>
<property name="initialPoolSize">100property>
<property name="MaxIdleTime">2000property>
default-config>
<named-config name="mySource">
<property name="driverClass">com.mysql.cj.jdbc.Driverproperty>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTCproperty>
<property name="user">rootproperty>
<property name="password">112899property>
<property name="initialPoolSize">10property>
<property name="maxIdleTime">30property>
<property name="maxPoolSize">100property>
<property name="minPoolSize">10property>
named-config>
<named-config name="mySource">
<property name="driverClass">com.mysql.cj.jdbc.Driverproperty>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/ssm?serverTimezone=UTCproperty>
<property name="user">rootproperty>
<property name="password">112899property>
<property name="initialPoolSize">10property>
<property name="maxIdleTime">30property>
<property name="maxPoolSize">100property>
<property name="minPoolSize">10property>
named-config>
c3p0-config>
测试类:
package JDBC;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class DataSourceTest {
static Connection connection=null;
public static Connection getConnection(DataSource dataSource) throws SQLException {
connection=dataSource.getConnection();
return connection;
}
public static void main(String[] args) throws SQLException {
//连接c3P0数据库连接池中的配置名称为mySource的数据库
DataSource dataSource=new ComboPooledDataSource("mySource");
getConnection(dataSource);
System.out.println(connection.getCatalog());
}
}
输出如下所示:
