赞
踩
标准接口 :
方法 :
获取连接 :
getConnection()
归还连接 :
//如果连接对象Connection是从连接池中获取的 , 那么调用
Connection.close();
//方法 , 就不会再关闭连接了 , 而是把连接归还了
1.步骤 :
2.定义配置文件 :
名称 : 必须是c3p0.properties 或者 c3p0-config.xml
路径 : 直接将文件放在src目录下即可
修改对应的参数即可
<?xml version="1.0" encoding="utf-8"?> <c3p0-config> <default-config> <property name="driverClass">com.mysql.cj.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/aisichen</property> <property name="user">root</property> <property name="password">acpl159357</property> <!-- 连接池参数 --> <!--初始化申请的链接数量--> <property name="initialPoolSize">5</property> <!--最大的链接数量--> <property name="maxPoolSize">10</property> <!--超时时间 ms--> <property name="checkoutTimeout">3000</property> </default-config> <named-config name="otherc3p0"> </named-config> </c3p0-config>
3.创建核心对象 , 数据库连接池对象 (ComboPooledDataSource) (CPDS)
4.获取连接 : getConnection()
package com.sichen.java.c3p0;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class C3P0Demo1 {
public static void main(String[] args) throws SQLException {
//1.创建数据库连接对象
ComboPooledDataSource ds = new ComboPooledDataSource();
//2.获取连接对象
Connection conn = ds.getConnection();
//打印
System.out.println(conn);
}
}
1.导入jar包 druid-x.x.x.jar
2.定义配置文件
是properties形式的文件
可以叫任意名称 , 可以放在任意目录下 (也就是说 , 这需要你手动去加载)
druid.properties
driverClassName = com.mysql.cj.jdbc.Driver url = jdbc:mysql://localhost:3306/aisichen username = root password = acpl159357 #初始化的链接数量 initialSize = 5 #最大连接数 maxActive = 10 #超时时间 maxWait = 3000 filters=stat #每60秒运行一次空闲连接回收器 timeBetweenEvictionRunsMillis=60000 #池中的连接空闲30分钟后被回收,默认值就是30分钟。 minEvictableIdleTimeMillis=1800000 #验证连接是否可用,使用的SQL语句 validationQuery=SELECT 1 #指明连接是否被空闲连接回收器(如果有)进行检验.如果检测失败,则连接将被从池中去除. testWhileIdle=true #借出连接时不要测试,否则很影响性能 testOnBorrow=false testOnReturn=false poolPreparedStatements=false maxPoolPreparedStatementPerConnectionSize=200 #在每次空闲连接回收器线程(如果有)运行时检查的连接数量,默认值就是3. numTestsPerEvictionRun=3
解释:
配置timeBetweenEvictionRunsMillis = "30000"后,每30秒运行一次空闲连接回收器(独立线程)。并每次检查3个连接,如果连接空闲时间超过30分钟就销毁。销毁连接后,连接数量就少了,如果小于minIdle数量,就新建连接,维护数量不少于minIdle,过行了新老更替。
testWhileIdle = "true" 表示每30秒,取出3条连接,使用validationQuery = "SELECT 1" 中的SQL进行测试 ,测试不成功就销毁连接。销毁连接后,连接数量就少了,如果小于minIdle数量,就新建连接。
testOnBorrow = "false" 一定要配置,因为它的默认值是true。false表示每次从连接池中取出连接时,不需要执行validationQuery = "SELECT 1" 中的SQL进行测试。若配置为true,对性能有非常大的影响,性能会下降7-10倍。所在一定要配置为false.
每30秒,取出numTestsPerEvictionRun条连接(本例是3,也是默认值),发出"SELECT 1" SQL语句进行测试 ,测试过的连接不算是“被使用”了,还算是空闲的。连接空闲30分钟后会被销毁
3.加载配置文件
//①加载配置文件
Properties properties = new Properties();
//②通过此类的字节码文件获取配置文件的字节输入流
InputStream is = druidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
//③将配置文件中的属性名和属性值装载到properties对象中
properties.load(is);
4.获取数据库连接池对象 : 通过一个工厂类来获取
DruidDataSourceFactory.createDataSource(properties);
5.获取连接 : getConnection();
最终结果 :
package com.sichen.java; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.InputStream; import java.sql.Connection; import java.util.Properties; public class druidDemo { public static void main(String[] args) throws Exception { //加载配置文件 Properties properties = new Properties(); InputStream is = druidDemo.class.getClassLoader().getResourceAsStream("druid.properties"); properties.load(is); //获取连接对象 DataSource dataSource = DruidDataSourceFactory.createDataSource(properties); Connection connection = dataSource.getConnection(); System.out.println(connection); } }
(1)定义一个类 JDBCUtils
(2)提供静态代码块 加载配置文件 , 初始化连接池对象
(3)提供方法 :
package com.sichen.java.Util; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.Properties; /** * Druid连接池的工具类 */ public class JDBCUtils { //定义一个成员变量 DataSource private static DataSource ds; static{ try { //1.加载配置文件 Properties properties = new Properties(); InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"); properties.load(is); //2.获取DataSource 连接池对象 ds = DruidDataSourceFactory.createDataSource(properties); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * 获取连接的方法 , 这里可能会发生异常 , 抛出异常 */ public static Connection getConnection() throws SQLException { return ds.getConnection(); } /** * 获取连接池的方法 , 用来在监听器中关闭连接池 */ public static DataSource getDataSource(){ return ds ; } }
on() throws SQLException {
return ds.getConnection();
}
/**
* 获取连接池的方法 , 用来在监听器中关闭连接池
*/
public static DataSource getDataSource(){
return ds ;
}
}
[外链图片转存中...(img-WSfb6fe3-1646802457352)]
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。