c3p0方式一:5000次的连接耗时553ms
文章插图
10.3.2方式2-使用配置文件模板来完成首先如10.3.1一样将jar包加入到项目中
然后将c3p0提供的配置文件c3p0-config.xml复制到src目录下,该文件指定了连接数据库和连接池的相关参数
c3p0-config.xml:
<c3p0-config><!--数据源的名称 , 代表连接池,名字是随意的--><named-config name="hello"><!-- 驱动类 --><property name="driverClass">com.mysql.jdbc.Driver</property><!-- url--><property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/hsp_db02</property><!-- 用户名 --><property name="user">root</property><!-- 密码 --><property name="password">123456</property><!-- 每次增长的连接数--><property name="acquireIncrement">5</property><!-- 初始的连接数 --><property name="initialPoolSize">10</property><!-- 最小连接数 --><property name="minPoolSize">5</property><!-- 最大连接数 --><property name="maxPoolSize">50</property><!-- 可连接的最多的命令对象数 --><property name="maxStatements">5</property><!-- 每个连接对象可连接的最多的命令对象数 --><property name="maxStatementsPerConnection">2</property></named-config></c3p0-config>
测试程序:package li.jdbc.datasource;import com.mchange.v2.c3p0.ComboPooledDataSource;import org.junit.Test;import java.sql.Connection;/** * 演示c3p0的使用 */public class C3P0_ {//方式2:使用配置文件模板来完成//将c3p0提供的配置文件c3p0-config.xml复制到src目录下// 该文件指定了连接数据库和连接池的相关参数@Testpublic void testC3P0_02() throws Exception {ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource("hello");//测试5000次连接诶mysqllong start = System.currentTimeMillis();System.out.println("开始执行...");for (int i = 0; i < 5000; i++) {Connection connection = comboPooledDataSource.getConnection();//System.out.println("连接成功");connection.close();}long end = System.currentTimeMillis();System.out.println("c3p0的第二种方式 5000次连接mysql 耗时=" + (end - start));}}
c3p0的第二种方式 5000次连接mysql 耗时=533ms文章插图
10.4德鲁伊连接池首先将Druid的jar包复制到项目的lib文件夹中,点击右键,选择add as library
文章插图
jar包在该网站可以下载 Central Repository: com/alibaba/druid (maven.org)然后将提供的配置文件的druid.properties(文件名可以随意)复制到src目录下
druid.properties:
#key=valuedriverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/hsp_02?rewriteBatchedStatements=true#url=jdbc:mysql://localhost:3306/hsp_02username=rootpassword=123456#initial connection SizeinitialSize=10#min idle connecton sizeminIdle=5#max active connection sizemaxActive=50#max wait time (5000 mil seconds) 在等待队列中的最大等待时间maxWait=5000
测试程序:package li.jdbc.datasource;import com.alibaba.druid.pool.DruidDataSourceFactory;import org.junit.Test;import javax.sql.DataSource;import java.io.FileInputStream;import java.sql.Connection;import java.util.Properties;/** * 测试德鲁伊Druid的使用 */public class Druid_ {@Testpublic void testDruid() throws Exception {//1.加入Druid包//2.加入配置文件 druid.properties,将该文件复制到项目的src目录下面//3.创建Properties对象,读取配置文件Properties properties = new Properties();properties.load(new FileInputStream("src\\druid.properties"));//4.创建一个指定参数的数据库连接池,Druid连接池DataSource dataSource =DruidDataSourceFactory.createDataSource(properties);long start = System.currentTimeMillis();for (int i = 0; i < 5000; i++) {Connection connection = dataSource.getConnection();//System.out.println("连接成功!");connection.close();}long end = System.currentTimeMillis();System.out.println("Druid连接池 操作5000次耗时="+(end-start));}}
德鲁伊连接池操作5000次的总耗时为434ms文章插图
5000次连接池的时间和c3p0的时间差不多,但是当连接数量到50万、500万时差距就会很明显,因此在实际开发中推荐使用Druid连接池 。
10.4.1德鲁伊工具类将之前7.1的JDBCUtils工具类改为Druid(德鲁伊)实现
通过德鲁伊数据库连接池获取连接对象
工具类:JDBCUtilsByDruid
package li.jdbc.datasource;import com.alibaba.druid.pool.DruidDataSourceFactory;import javax.sql.DataSource;import java.io.FileInputStream;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties;/** * 基于Druid数据库连接池的工具类 */public class JDBCUtilsByDruid {private static DataSource ds;//在静态代码块完成ds的初始化//静态代码块在加载类的时候只会执行一次 , 因此数据源也只会初始化一次static {Properties properties = new Properties();try {properties.load(new FileInputStream("src\\druid.properties"));ds = DruidDataSourceFactory.createDataSource(properties);} catch (Exception e) {e.printStackTrace();}}//编写getConnection方法public static Connection getConnection() throws SQLException {return ds.getConnection();}//关闭连接(注意:在数据库连接池技术中 , close不是真的关闭连接,而是将Connection对象放回连接池中)public static void close(ResultSet resultSet, Statement statemenat, Connection connection) {try {if (resultSet != null) {resultSet.close();}if (statemenat != null) {statemenat.close();}if (connection != null) {connection.close();}} catch (SQLException e) {throw new RuntimeException(e);}}}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 红魔6pro和小米11哪个好_红魔6pro和小米11对比
- 小米手表color2和华为gt2哪个好_区别对比
- 荣耀50se和荣耀v40哪个好_荣耀50se和荣耀v40参数对比
- 基于QT和C++实现的翻金币游戏
- Docker安装MongoDB并使用Navicat连接
- ubuntu-22.04 树莓派Zero 2 W通过.NET6和libusb操作USB读写
- 国窖1573和五粮液哪个档次高_国窖1573和五粮液哪个好喝
- 华为智慧屏75寸和小米电视5pro75寸对比_哪个值得入手
- Mysql单表访问方法,索引合并,多表连接原理,基于规则的优化,子查询优化
- 红米note10和红米note10pro怎么选_区别对比