如何将常用数据库连接池技术改写为一个长尾词?

2026-04-10 10:091阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2290个文字,预计阅读时间需要10分钟。

如何将常用数据库连接池技术改写为一个长尾词?

1. 数据库连接简介及实际开发中获取连接或释放资源是消耗系统资源的两个关键过程。为解决此类性能问题,我们常采用连接池技术,共享连接Connection。

1. 数据库连接池 简介

实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们 采用连接池技术,来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了,这些操作都交 给了连接池。

如何使用连接池:

Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。 这样应用程序可以方便的切换不同的连接池!DBCP、C3P0、Druid 就是几个常用的连接池。

2. DBCP连接池

2.1 简介

DBCP是Apache的一个开源的连接池。Tomcat中就内置了该连接池。

2.2 引入方式

1. 下载 JAR 包并导入

首先,从 commons.apache.org/proper/commons-dbcp/download_dbcp.cgi 下载dbcp连接池,我这里下载的是 commons-dbcp2-2.8.0-bin.zip 解压后commons-dbcp2-2.8.0.jar就是所需的文件。

然而,DBCP连接池有两个依赖:commons-logging-1.2-bin.zip 和 commons-pool2-2.9.0-bin.zip 下载后解压出Jar文件。

获得 jar 包后开始导入:

在IDEA中导入 jar 包,可以在项目中创建一个文件夹,然后右键点击文件夹,选择Add as Library,最后将需要的Jar包(也就是刚刚下载的三个jar包)导入即可。注意:使用了连接池并不会自带数据库连接驱动,所以数据库连接器的 jar 包也要导入。

注意:

不同版本的依赖以不同,如 dbcp-1.4 只需要 pool-1.5.6就可以了。这些也不用记,只需要 先下载dbcp的 jar 包并导入执行程序,程序会报NoClassDefFoundError,意思就是执行时发现需要后边的类,但找不到。

知道却什么后就可以从官网:commons.apache.org/proper/ 找到并下载对应的东西就可以了。

不得不说,这就逐渐体现出Maven的重要性了。

2.3 使用

DBCP中的BasicDateSource,就是 javax.sql.DateSource接口的实现类,创建其对象,对其进行配置,然后就可以通过这个对象获取数据库连接(Connection对象)了。以此来代替通过DriverManager获取连接对象。

DBCP工具类(使用 setXxx 配置):

public class DBCPUtils { private DBCPUtils(){} // 配置的相关信息 public static final String DRIVERCLASS = "com.mysql.cj.jdbc.Driver"; public static final String URL = "jdbc:mysql://localhost:3306/lianxi01?characterEncoding=utf-8&serverTimezone=UTC"; public static final String USERNAME = "root"; public static final String PASSWORD = "123456"; private static BasicDataSource ds; static { // 代码配置法 ds = new BasicDataSource(); ds.setDriverClassName(DRIVERCLASS); // 配置 驱动器名 ds.setUrl(URL); // 配置 数据库地址 ds.setUsername(USERNAME); // 配置 数据库登录用户名 ds.setPassword(PASSWORD); // 配置 数据库登录密码 ds.setMaxTotal(20); // 相当于DBCP1中的maxActive,表示最多有20条连接 默认:8 ds.setMaxIdle(10); // 最大空闲连接数 默认:8 ds.setMinIdle(5); // 最小空闲连接数 默认:0 ds.setInitialSize(8); // 连接池启动时创建的初始化连接数量 默认:0 // 注意: setConnectionProperties()方法要求传入以分号分割的配置信息字符串,然而测试写在此处并没有什么用 // 所以:使用配置文件时,还是用 工厂类 的方法创建 } // 获取连接的方法 public static Connection getConnection(){ try { return ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return null; } // 归还连接的方法 public static void close(AutoCloseable c){ if(null!=c){ try { c.close(); } catch (Exception e) { e.printStackTrace(); } } } }

DBCP工具类(使用 properties文件 配置):

public class DBCPUtils { private DBCPUtils(){} // 配置文件 的 资源路径 推荐使用配置文件,耦合性低,符合开闭原则 public static final String path = "/dbcp.properties"; private static BasicDataSource ds; static { // 使用Properties配置文件 Properties p = new Properties(); InputStream in = DBCPUtils.class.getResourceAsStream(path); try { p.load(in); ds = BasicDataSourceFactory.createDataSource(p); // 工厂方法创建数据源 } catch (Exception e) { e.printStackTrace(); } } // 获取连接的方法 public static Connection getConnection(){ try { return ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return null; } // 归还连接的方法 public static void close(AutoCloseable c){ if(null!=c){ try { c.close(); } catch (Exception e) { e.printStackTrace(); } } } }

jdbc.properties 文件,放置在src或resource目录下:

driverClassName=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/lianxi01?characterEncoding=utf-8&serverTimezone=UTC username=root password=123456 maxTotal=20 maxIdle=10 minIdle=5 initialSize=8

3. C3P0连接池

3.1 简介

C3P0是一个开源的JDBC连接池,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、 Spring等。

3.2 导入 jar 包

下载网址:sourceforge.net/projects/c3p0/

如何将常用数据库连接池技术改写为一个长尾词?

下载后将其中 lib 目录下的三个 jar 包全部导入即可:

3.3 C3P0配置

1. 基于 setXxx 配置

public static ComboPooledDataSource ds; static { ds = new ComboPooledDataSource(); try { ds.setDriverClass("com.mysql.cj.jdbc.Driver"); ds.setJdbcUrl("jdbc:mysql://localhost:3306/lianxi01?characterEncoding=utf-8&serverTimezone=UTC"); ds.setUser("root"); ds.setPassword("123456"); ds.setInitialPoolSize(3); ds.setMaxPoolSize(10); ds.setMinPoolSize(3); ds.setAcquireIncrement(3); } catch (PropertyVetoException e) { e.printStackTrace(); } }

2. 使用配置文件

配置文件名称必须为:c3p0-config.xml 内容如下:

<?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/lianxi01?characterEncoding=utf-8&serverTimezone=UTC</property> <property name="user">root</property> <property name="password">123456</property> <!-- initialPoolSize:初始化时获取三个连接, 取值应在minPoolSize与maxPoolSize之间。 --> <property name="initialPoolSize">3</property> <!-- maxIdleTime:最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。--> <property name="maxIdleTime">60</property> <!-- maxPoolSize:连接池中保留的最大连接数 --> <property name="maxPoolSize">100</property> <!-- minPoolSize: 连接池中保留的最小连接数 --> <property name="minPoolSize">10</property> </default-config> <!--配置连接池mysql--> <named-config name="mysql"> <property name="driverClass">com.mysql.cj.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/lianxi01?characterEncoding=utf-8&serverTimezone=UTC</property> <property name="user">root</property> <property name="password">123456</property> <property name="initialPoolSize">10</property> <property name="maxIdleTime">30</property> <property name="maxPoolSize">100</property> <property name="minPoolSize">10</property> </named-config> <!--配置连接池2,可以配置多个--> </c3p0-config>

注意: jdbcUrl中有多个参数时使用&连接,但XML文件中&是转义字符,&amp;amp; 才表示 & 字符。

使用:

public static ComboPooledDataSource ds = new ComboPooledDataSource("mysql"); // 这里的 mysql 是配置文件中 named-config 的 name 属性给定的值。 // 不写参数时表示使用默认配置<default-config>

3. 常用配置参数

参数

含义

driverClass

数据库驱动类

jdbcUrl

数据库连接地址

user

登录 用户名

password

用户 密码



initialPoolSize

初始化连接数,取值应在minPoolSize与maxPoolSize之间。 默认: 3

maxIdleTime

最大空闲时间,多少秒内未使用则连接被丢弃。若为0则永不丢弃。 默认: 0

maxPoolSize

最大连接数 默认:15

minPoolSize

最小连接数 默认:10

目前还没有经历过需要配置这些的场景,不好深究,等用到了再说吧。

blog.csdn.net/zhanghanlun/article/details/80918422

4. Druid连接池

4.1 简介

Druid(德鲁伊)是阿里巴巴开发的号称为监控而生的数据库连接池,Druid是目前最好的数据库连接池。在功 能、性能、扩展性方面,都超过其他数据库连接池,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行 情况。

4.2 导入 jar 包

下载网址:repo1.maven.org/maven2/com/alibaba/druid/ 可能会比较慢。

下载对应 jar 包,并导入即可。没有什么依赖。

4.3 配置使用方式

可以通过properties文件进行配置,与DBCP的配置方式极其相似。

Druid工具类:

import com.alibaba.druid.pool.DruidDataSource; 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.SQLException; import java.util.Properties; public class DruidUtils { private DruidUtils(){} private static DataSource ds; // 创建数据源 static{ InputStream in = DruidDataSource.class.getResourceAsStream("/dbcp.properties"); Properties p = new Properties(); try { p.load(in); ds = DruidDataSourceFactory.createDataSource(p); }catch (Exception e) { e.printStackTrace(); } } // 获取连接 public static Connection getConnection(){ try { return ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return null; } // 关闭连接 public static void close(AutoCloseable c){ if(null!=c){ try { c.close(); } catch (Exception e) { e.printStackTrace(); } } } }

配置文件:

driverClassName=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/lianxi01?characterEncoding=utf-8&serverTimezone=UTC username=root password=123456 initialSize=5 maxActive=10 # 不是使用maxIdle,而是想c3p0一样指定最长等待时间 maxWait=3000

本文共计2290个文字,预计阅读时间需要10分钟。

如何将常用数据库连接池技术改写为一个长尾词?

1. 数据库连接简介及实际开发中获取连接或释放资源是消耗系统资源的两个关键过程。为解决此类性能问题,我们常采用连接池技术,共享连接Connection。

1. 数据库连接池 简介

实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程,为了解决此类性能问题,通常情况我们 采用连接池技术,来共享连接Connection。这样我们就不需要每次都创建连接、释放连接了,这些操作都交 给了连接池。

如何使用连接池:

Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。 这样应用程序可以方便的切换不同的连接池!DBCP、C3P0、Druid 就是几个常用的连接池。

2. DBCP连接池

2.1 简介

DBCP是Apache的一个开源的连接池。Tomcat中就内置了该连接池。

2.2 引入方式

1. 下载 JAR 包并导入

首先,从 commons.apache.org/proper/commons-dbcp/download_dbcp.cgi 下载dbcp连接池,我这里下载的是 commons-dbcp2-2.8.0-bin.zip 解压后commons-dbcp2-2.8.0.jar就是所需的文件。

然而,DBCP连接池有两个依赖:commons-logging-1.2-bin.zip 和 commons-pool2-2.9.0-bin.zip 下载后解压出Jar文件。

获得 jar 包后开始导入:

在IDEA中导入 jar 包,可以在项目中创建一个文件夹,然后右键点击文件夹,选择Add as Library,最后将需要的Jar包(也就是刚刚下载的三个jar包)导入即可。注意:使用了连接池并不会自带数据库连接驱动,所以数据库连接器的 jar 包也要导入。

注意:

不同版本的依赖以不同,如 dbcp-1.4 只需要 pool-1.5.6就可以了。这些也不用记,只需要 先下载dbcp的 jar 包并导入执行程序,程序会报NoClassDefFoundError,意思就是执行时发现需要后边的类,但找不到。

知道却什么后就可以从官网:commons.apache.org/proper/ 找到并下载对应的东西就可以了。

不得不说,这就逐渐体现出Maven的重要性了。

2.3 使用

DBCP中的BasicDateSource,就是 javax.sql.DateSource接口的实现类,创建其对象,对其进行配置,然后就可以通过这个对象获取数据库连接(Connection对象)了。以此来代替通过DriverManager获取连接对象。

DBCP工具类(使用 setXxx 配置):

public class DBCPUtils { private DBCPUtils(){} // 配置的相关信息 public static final String DRIVERCLASS = "com.mysql.cj.jdbc.Driver"; public static final String URL = "jdbc:mysql://localhost:3306/lianxi01?characterEncoding=utf-8&serverTimezone=UTC"; public static final String USERNAME = "root"; public static final String PASSWORD = "123456"; private static BasicDataSource ds; static { // 代码配置法 ds = new BasicDataSource(); ds.setDriverClassName(DRIVERCLASS); // 配置 驱动器名 ds.setUrl(URL); // 配置 数据库地址 ds.setUsername(USERNAME); // 配置 数据库登录用户名 ds.setPassword(PASSWORD); // 配置 数据库登录密码 ds.setMaxTotal(20); // 相当于DBCP1中的maxActive,表示最多有20条连接 默认:8 ds.setMaxIdle(10); // 最大空闲连接数 默认:8 ds.setMinIdle(5); // 最小空闲连接数 默认:0 ds.setInitialSize(8); // 连接池启动时创建的初始化连接数量 默认:0 // 注意: setConnectionProperties()方法要求传入以分号分割的配置信息字符串,然而测试写在此处并没有什么用 // 所以:使用配置文件时,还是用 工厂类 的方法创建 } // 获取连接的方法 public static Connection getConnection(){ try { return ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return null; } // 归还连接的方法 public static void close(AutoCloseable c){ if(null!=c){ try { c.close(); } catch (Exception e) { e.printStackTrace(); } } } }

DBCP工具类(使用 properties文件 配置):

public class DBCPUtils { private DBCPUtils(){} // 配置文件 的 资源路径 推荐使用配置文件,耦合性低,符合开闭原则 public static final String path = "/dbcp.properties"; private static BasicDataSource ds; static { // 使用Properties配置文件 Properties p = new Properties(); InputStream in = DBCPUtils.class.getResourceAsStream(path); try { p.load(in); ds = BasicDataSourceFactory.createDataSource(p); // 工厂方法创建数据源 } catch (Exception e) { e.printStackTrace(); } } // 获取连接的方法 public static Connection getConnection(){ try { return ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return null; } // 归还连接的方法 public static void close(AutoCloseable c){ if(null!=c){ try { c.close(); } catch (Exception e) { e.printStackTrace(); } } } }

jdbc.properties 文件,放置在src或resource目录下:

driverClassName=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/lianxi01?characterEncoding=utf-8&serverTimezone=UTC username=root password=123456 maxTotal=20 maxIdle=10 minIdle=5 initialSize=8

3. C3P0连接池

3.1 简介

C3P0是一个开源的JDBC连接池,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、 Spring等。

3.2 导入 jar 包

下载网址:sourceforge.net/projects/c3p0/

如何将常用数据库连接池技术改写为一个长尾词?

下载后将其中 lib 目录下的三个 jar 包全部导入即可:

3.3 C3P0配置

1. 基于 setXxx 配置

public static ComboPooledDataSource ds; static { ds = new ComboPooledDataSource(); try { ds.setDriverClass("com.mysql.cj.jdbc.Driver"); ds.setJdbcUrl("jdbc:mysql://localhost:3306/lianxi01?characterEncoding=utf-8&serverTimezone=UTC"); ds.setUser("root"); ds.setPassword("123456"); ds.setInitialPoolSize(3); ds.setMaxPoolSize(10); ds.setMinPoolSize(3); ds.setAcquireIncrement(3); } catch (PropertyVetoException e) { e.printStackTrace(); } }

2. 使用配置文件

配置文件名称必须为:c3p0-config.xml 内容如下:

<?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/lianxi01?characterEncoding=utf-8&serverTimezone=UTC</property> <property name="user">root</property> <property name="password">123456</property> <!-- initialPoolSize:初始化时获取三个连接, 取值应在minPoolSize与maxPoolSize之间。 --> <property name="initialPoolSize">3</property> <!-- maxIdleTime:最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。--> <property name="maxIdleTime">60</property> <!-- maxPoolSize:连接池中保留的最大连接数 --> <property name="maxPoolSize">100</property> <!-- minPoolSize: 连接池中保留的最小连接数 --> <property name="minPoolSize">10</property> </default-config> <!--配置连接池mysql--> <named-config name="mysql"> <property name="driverClass">com.mysql.cj.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/lianxi01?characterEncoding=utf-8&serverTimezone=UTC</property> <property name="user">root</property> <property name="password">123456</property> <property name="initialPoolSize">10</property> <property name="maxIdleTime">30</property> <property name="maxPoolSize">100</property> <property name="minPoolSize">10</property> </named-config> <!--配置连接池2,可以配置多个--> </c3p0-config>

注意: jdbcUrl中有多个参数时使用&连接,但XML文件中&是转义字符,&amp;amp; 才表示 & 字符。

使用:

public static ComboPooledDataSource ds = new ComboPooledDataSource("mysql"); // 这里的 mysql 是配置文件中 named-config 的 name 属性给定的值。 // 不写参数时表示使用默认配置<default-config>

3. 常用配置参数

参数

含义

driverClass

数据库驱动类

jdbcUrl

数据库连接地址

user

登录 用户名

password

用户 密码



initialPoolSize

初始化连接数,取值应在minPoolSize与maxPoolSize之间。 默认: 3

maxIdleTime

最大空闲时间,多少秒内未使用则连接被丢弃。若为0则永不丢弃。 默认: 0

maxPoolSize

最大连接数 默认:15

minPoolSize

最小连接数 默认:10

目前还没有经历过需要配置这些的场景,不好深究,等用到了再说吧。

blog.csdn.net/zhanghanlun/article/details/80918422

4. Druid连接池

4.1 简介

Druid(德鲁伊)是阿里巴巴开发的号称为监控而生的数据库连接池,Druid是目前最好的数据库连接池。在功 能、性能、扩展性方面,都超过其他数据库连接池,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行 情况。

4.2 导入 jar 包

下载网址:repo1.maven.org/maven2/com/alibaba/druid/ 可能会比较慢。

下载对应 jar 包,并导入即可。没有什么依赖。

4.3 配置使用方式

可以通过properties文件进行配置,与DBCP的配置方式极其相似。

Druid工具类:

import com.alibaba.druid.pool.DruidDataSource; 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.SQLException; import java.util.Properties; public class DruidUtils { private DruidUtils(){} private static DataSource ds; // 创建数据源 static{ InputStream in = DruidDataSource.class.getResourceAsStream("/dbcp.properties"); Properties p = new Properties(); try { p.load(in); ds = DruidDataSourceFactory.createDataSource(p); }catch (Exception e) { e.printStackTrace(); } } // 获取连接 public static Connection getConnection(){ try { return ds.getConnection(); } catch (SQLException e) { e.printStackTrace(); } return null; } // 关闭连接 public static void close(AutoCloseable c){ if(null!=c){ try { c.close(); } catch (Exception e) { e.printStackTrace(); } } } }

配置文件:

driverClassName=com.mysql.cj.jdbc.Driver url=jdbc:mysql://localhost:3306/lianxi01?characterEncoding=utf-8&serverTimezone=UTC username=root password=123456 initialSize=5 maxActive=10 # 不是使用maxIdle,而是想c3p0一样指定最长等待时间 maxWait=3000