初识C3P0
C3P0是一个开源的Java数据库连接池,用于管理和复用数据库连接,使用C3P0数据库连接池可以有效地管理数据库连接,减少频繁创建和关闭连接的开销,以提高应用程序的性能和可扩展性。它支持JDBC驱动程序,并提供了一些高级功能,如连接池自动回收、连接检测、连接超时等。
它可以在应用程序启动时,创建一定数量的数据库连接,并在需要时将连接分配给应用程序。当应用程序使用完连接后,它可以将连接返回到连接池中进行复用,而不是直接关闭连接。
C3P0还提供了一些高级功能,如连接池自动回收。当数据库连接长时间未使用时,C3P0可以自动回收这些连接,并释放相关资源。此外,C3P0还支持连接检测和连接超时功能,可以检测不可用的连接并将其从连接池中移除。
C3P0的配置相对简单,可以通过配置文件或编程方式进行设置。可以设置连接池的最小连接数、最大连接数、连接超时时间、连接检测时间间隔等参数。
使用C3P0:
在pom.xml文件中导入对应的依赖:
<dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 --> <dependency> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> <version>0.9.5.2</version> </dependency>
第二步:创建对应的配置文件c3p0-config.xml,注意c3p0配置文件的名字必须为这个,不能自定义,相比于之前的JDBCUtils,c3p0-config.xml的作用即为加载驱动,并且可以配置数据库连接所需的相关信息,那么在真正使用时,我们只需要获取连接对象即可
<?xml version="1.0" encoding="utf-8"?> <c3p0-config> <!--默认的配置--连接book数据库--> <default-config> <property name="driverClass">com.mysql.cj.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/book?serverTimezone=UTC</property> <property name="user">root</property> <property name="password">112899</property> <property name="initialPoolSize">100</property> <property name="MaxIdleTime">2000</property> </default-config> <!--用户自定义配置1---连接mybatis数据库 --> <named-config name="mySource"> <property name="driverClass">com.mysql.cj.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC</property> <property name="user">root</property> <property name="password">112899</property> <property name="initialPoolSize">10</property> <property name="maxIdleTime">30</property> <property name="maxPoolSize">100</property> <property name="minPoolSize">10</property> </named-config> <!--用户自定义配置2---连接ssm数据库 --> <named-config name="mySource"> <property name="driverClass">com.mysql.cj.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC</property> <property name="user">root</property> <property name="password">112899</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>
测试类:
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()); } }
输出如下所示: