三种数据连接池技术:C3P0,DBCP,Druid的部署和配置
程序员文章站
2022-05-24 12:30:00
...
1,数据库连接池简介
数据库连接池
(1)C3P0:是一个开源组织提供的一个数据库连接池,速度相对较慢,稳定性还可以Hibernate官方推荐使用
(2)DBCP:是Apache提供的数据库连接池,tomcat服务器自带的DBCP数据库连接池。速度相对C3P0较快,但因自身存在BUG, Hibernate3已不再支持
(3)Druid:是阿里提供的数据库连接池,据说是集DBCP,C3P0优点于一身的数据库连接池
2,jar包
链接:https://pan.baidu.com/s/1hM2dhz3IlBg2-LXOlgg-Qg
提取码:ae12
3,C3P0:
- 需要导入的包
- 新建一个文件名为:c3p0-config.xml 的xml文件,文件名不能更改!
添加配置信息
<?xml version="1.0" encoding="utf-8" ?>
<c3p0-config>
<named-config name="testpool">
<!-- 四个基本配置信息 -->
<!-- Driver类的位置 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<!-- url连接 -->
<property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
<!-- 用户名 -->
<property name="user">root</property>
<!-- 密码 -->
<property name="password">root</property>
<!-- 数据库连接池的基本信息 -->
<!-- 当数据库连接池中的连接数不够时,c3p0一次性向数据库服务器申请的连接数 -->
<property name="acquireIncrement">5</property>
<!-- c3p0数据库连接池中初始化时的连接数 -->
<property name="initialPoolSize">10</property>
<!-- c3p0数据库连接池中维护的最少的连接数 -->
<property name="minPoolSize">10</property>
<!-- c3p0数据库连接池中维护的最多的连接数 -->
<property name="maxPoolSize">100</property>
<!-- c3p0数据库连接池中最多维护的Statements的个数 -->
<property name="maxStatements">50</property>
<!-- 每个连接中最多可以使用的Statements的个数 -->
<property name="maxStatementsPerConnection">2</property>
</named-config>
</c3p0-config>
- 测试是否配置成功
创建数据库连接池代码
public class C3P0Test {
public static void main(String[] args) throws SQLException {
//获取数据库连接池,注意这里的参数:testpool,是配置文件中的: <named-config name="testpool">
ComboPooledDataSource cpds = new ComboPooledDataSource("testpool");
//获取连接
Connection conn = cpds.getConnection();
//打印是否获取成功
System.out.println(conn);
}
}
控制台
九月 23, 2020 3:03:51 下午 com.mchange.v2.log.MLog <clinit>
信息: MLog clients using java 1.4+ standard logging.
九月 23, 2020 3:04:00 下午 com.mchange.v2.c3p0.C3P0Registry banner
信息: Initializing c3p0-0.9.1.2 [built 21-May-2007 15:04:56; debug? true; trace: 10]
九月 23, 2020 3:04:01 下午 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager
信息: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 5, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> testpool, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hgewapac1fjnwme1doqsvo|6f539caf, idleConnectionTestPeriod -> 0, initialPoolSize -> 10, jdbcUrl -> jdbc:mysql://localhost:3306/test, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 100, maxStatements -> 50, maxStatementsPerConnection -> 2, minPoolSize -> 10, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> null, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ]
[email protected]
4,DBCP
- 需要导入的包
- 创建一个dbcp.properties类型的文件,文件名可以更改
配置信息
#四个基本信息
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=root
#连接池的配置
initialSize=10
#。。。。。。
#根据需要进行设置
#dbcp连接池常用基本配置属性
#
#1.initialSize :连接池启动时创建的初始化连接数量(默认值为0)
#
#2.maxActive :连接池中可同时连接的最大的连接数(默认值为8,调整为20,高峰单机器在20并发左右,自己根据应用场景定)
#
#3.maxIdle:连接池中最大的空闲的连接数,超过的空闲连接将被释放,如果设置为负数表示不限制(默认为8个,maxIdle不能设置太小,因为假如在高负载的情况下,连接的打开时间比关闭的时间快,会引起连接池中idle的个数 上升超过maxIdle,而造成频繁的连接销毁和创建,类似于jvm参数中的Xmx设置)
#
#4.minIdle:连接池中最小的空闲的连接数,低于这个数量会被创建新的连接(默认为0,调整为5,该参数越接近maxIdle,性能越好,因为连接的创建和销毁,都是需要消耗资源的;但是不能太大,因为在机器很空闲的时候,也会创建低于minidle个数的连接,类似于jvm参数中的Xmn设置)
#
#5.maxWait :最大等待时间,当没有可用连接时,连接池等待连接释放的最大时间,超过该时间限制会抛出异常,如果设置-1表示无限等待(默认为无限,调整为60000ms,避免因线程池不够用,而导致请求被无限制挂起)
#
#6.poolPreparedStatements:开启池的prepared(默认是false,未调整,经过测试,开启后的性能没有关闭的好。)
#
#7.maxOpenPreparedStatements:开启池的prepared 后的同时最大连接数(默认无限制,同上,未配置)
#
#8.minEvictableIdleTimeMillis :连接池中连接,在时间段内一直空闲, 被逐出连接池的时间
#
#9.removeAbandonedTimeout :超过时间限制,回收没有用(废弃)的连接(默认为 300秒,调整为180)
#
#10.removeAbandoned :超过removeAbandonedTimeout时间后,是否进 行没用连接(废弃)的回收(默认为false,调整为true)
- 测试配置是否成功
获得连接池和数据库连接代码
public class DBCPTest {
public static void main(String[] args) throws Exception {
//通过系统类加载器获取流,参数就是创建的文件:dbcp.properties
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("dbcp.properties");
//创建Properties 实例
Properties pro = new Properties();
//加载流
pro.load(is);
//获取数据库连接池
DataSource ds = BasicDataSourceFactory.createDataSource(pro);
//获取数据库连接
Connection conn = ds.getConnection();
//测试
System.out.println(conn);
}
}
控制台
jdbc:mysql://localhost:3306/test, UserName=[email protected], MySQL Connector Java
5,Druid
-
需要导入的包
-
创建一个druid.properties类型的文件,文件名可以更改
文件配置信息
#四个基本配置
url=jdbc:mysql://localhost:3306/test
username=root
password=root
driverClassName=com.mysql.jdbc.Driver
#线程池配置
#1,initialSize :初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时
#2,maxActive :最大连接池数量
#3,minIdle :最小连接池数量
#4,maxWait :获取连接时最大等待时间,单位毫秒。配置了maxWait之后,缺省启用公平锁,并发效率会有所下降,如果需要可以通过配置useUnfairLock属性为true使用非公平锁。
#5,poolPreparedStatements :是否缓存preparedStatement,也就是PSCache。PSCache对支持游标的数据库性能提升巨大,比如说oracle。在mysql下建议关闭。
#6,maxOpenPreparedStatements :要启用PSCache,必须配置大于0,当大于0时,poolPreparedStatements自动触发修改为true。在Druid中,不会存在Oracle下PSCache占用内存过多的问题,可以把这个数值配置大一些,比如说100
#7,validationQuery :用来检测连接是否有效的sql,要求是一个查询语句。如果validationQuery为null,testOnBorrow、testOnReturn、testWhileIdle都不会其作用。
#8,testOnBorrow :申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
#9,testOnReturn :归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
#10,testWhileIdle :建议配置为true,不影响性能,并且保证安全性。申请连接的时候检测,如果空闲时间大于timeBetweenEvictionRunsMillis,执行validationQuery检测连接是否有效。
#11,timeBetweenEvictionRunsMillis :有两个含义:
#1) Destroy线程会检测连接的间隔时间2) testWhileIdle的判断依据,详细看testWhileIdle属性的说明
#12,connectionInitSqls :物理连接初始化的时候执行的sql
#13,exceptionSorter :当数据库抛出一些不可恢复的异常时,抛弃连接
#14,filters :属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:监控统计用的filter:stat日志用的filter:log4j防御sql注入的filter:wall
#14,proxyFilters :类型是List<com.alibaba.druid.filter.Filter>,如果同时配置了filters和proxyFilters,是组合关系,并非替换关系
- 测试是否配置成功
测试代码
public class DruidTest {
public static void main(String[] args) throws Exception {
//通过系统类加载器获取流
InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("druid.properties");
//创建Properties实例
Properties pro = new Properties();
//加载流
pro.load(is);
//获取数据库连接池
DataSource source = DruidDataSourceFactory.createDataSource(pro);
//获取连接
Connection conn = source.getConnection();
//测试
System.out.println(conn);
}
}
控制台
九月 23, 2020 3:21:10 下午 com.alibaba.druid.pool.DruidDataSource info
信息: {dataSource-1} inited
[email protected]
PS:如果有错误请指正
END
上一篇: MFC 关于系统时间获取