常用连接池dbcp (DataBase Connection Pool)
引入依赖:
<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
配置文件(maven项目)
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=cy414ljh212,,,
#dbcp参数
#初始化时应该初始化的物理连接数
initialSize=30
#最大激活连接数,当连接数量达到此值,不会再创建连接而是等待其他连接释放
maxActive=30
#最大的空闲连接数(已经创建但未被使用的连接,会被定期回收,最大空闲值就是maxIdle
maxIdle=10
#最小的空闲连接数
minIdle=10
#从连接池中获取连接的最大等待时间,单位ms,如果超过此时间还未获得连接则抛出异常
maxWait=1000
测试demo
package com.duing;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.Properties;
public class DBCPTest {
//数据源
private static DataSource dataSource;
static {
Properties properties=new Properties();
try {
properties.load(DBCPTest.class.getClassLoader()
.getResourceAsStream("dbcp.properties"));
//通过基础数据源工厂类来创建连接池
dataSource= BasicDataSourceFactory.createDataSource(properties);
Connection conn=getConn();
DatabaseMetaData metaData= conn.getMetaData();
System.out.println("数据库名称"+metaData.getDatabaseProductName());
System.out.println("数据库版本号"+metaData.getDatabaseProductVersion());
closeConn(conn);
} catch (Exception Exception) {
Exception.printStackTrace();
}
}
//获取连接
public static Connection getConn() throws SQLException {
Connection conn=null;
conn= dataSource.getConnection();
return conn;
}
//关闭连接
public static void closeConn(Connection conn) throws SQLException {
if(conn!=null&&conn.isClosed()==false){
conn.close();
}
}
public static void main(String[] args) throws SQLException {
for (int i=0;i<10;i++){
Connection conn=getConn();
System.out.println("成功获取连接"+i);
closeConn(conn);
}
}
}
常用连接池c3p0
引入依赖:
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
配置文件(maven项目)
<?xml version="1.0" encoding="UTF-8"?>
<!--根标签 和文件名一致-->
<c3p0-config>
<!--默认配置标签 数据源名字是随机的-->
<!-- <default-config> -->
<!-- 可以指定名称进行配置,适用于多数据源场景-->
<named-config name="myC3P0">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
<property name="user">root</property>
<property name="password">cy414ljh212,,,</property>
<!--初始化连接池的连接数量-->
<property name="initialPoolSize">10</property>
<!--最大可创建连接数-->
<property name="maxPoolSize">10</property>
<!--最小可连接数-->
<property name="minPoolSize">2</property>
<!--当没有空闲连接时,一次性创建的新连接数量-->
<property name="acquireIncrement">2</property>
<!--连接的最大空闲时间,如果一直未使用则断开此连接,如果配置为0代表永远不会断开-->
<property name="maxIdleTime">0</property>
<!-- </default-config>-->
</named-config>
</c3p0-config>
测试demo
package com.duing;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class C3P0Test {
//数据源
private static ComboPooledDataSource dataSource;
static {
//将指定配置文件(c3p0-config.xml)中的指定标签内容加载进来
//无参构造时会读取默认配置,有参构造时读取指定名称的配置
dataSource=new ComboPooledDataSource("myC3P0");
System.out.println("数据源名字"+dataSource.getDataSourceName());
}
//获取连接
public static Connection getConn() throws SQLException {
return dataSource.getConnection();
}
//关闭连接
public static void closeConn(Connection conn) throws SQLException {
if(conn!=null&&!conn.isClosed()){
conn.close();
}
}
public static void main(String[] args) throws SQLException {
Connection connection=getConn();
System.out.println("成功获取连接");
closeConn(connection);
}
}
常用连接池druid
引入依赖:
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
配置文件(maven项目)
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=cy414ljh212,,,
#初始化大小
initialSize=5
#最大激活连接数
maxActive=20
#最小的空闲连接数
minIdle=10
#从连接池中获取连接的最大等待时间
maxWait=1000
#间隔多长时间,检测是否关闭空闲连接,单位为毫秒
timeBetweenEvictionRunsMillis=2000
#控制一个连接在资源池中,最大或最小的生存时间,单位也是毫秒
minEvictableIdleTimeMillis=600000
maxEvictableIdleTimeMillis=900000
测试demo
package com.duing;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.Properties;
public class DruidTest {
private static DataSource dataSource;
static {
Properties properties=new Properties();
try {
properties.load(DBCPTest.class.getClassLoader()
.getResourceAsStream("druid.properties"));
//通过基础数据源工厂类来创建连接池
dataSource= DruidDataSourceFactory.createDataSource(properties);
Connection conn=getConn();
DatabaseMetaData metaData= conn.getMetaData();
System.out.println("数据库名称"+metaData.getDatabaseProductName());
System.out.println("数据库版本号"+metaData.getDatabaseProductVersion());
closeConn(conn);
} catch (Exception Exception) {
Exception.printStackTrace();
}
}
public static Connection getConn() throws SQLException {
Connection conn=null;
conn= dataSource.getConnection();
return conn;
}
public static void closeConn(Connection conn) throws SQLException {
if(conn!=null&&conn.isClosed()==false){
conn.close();
}
}
public static void main(String[] args) throws SQLException {
for (int i=0;i<10;i++){
Connection conn=getConn();
System.out.println("成功获取连接"+i);
closeConn(conn);
}
}
}
运行结果: