java--JDBC-连接池----JDBC小总结

一.连接池

1.连接池概述

目的:为了解决建立数据库连接耗费资源和时间很多的问题,提高性能
Connection对象在JDBC使用的时候就会去创建一个对象,使用结束以后就会将这个对象给销毁了(close).每次创建和销毁对象都是耗时操作.需要使用连接池对其进行优化.
连接池初始化的时候,初始化多个连接,将多个连接放入到池(集合)中.每次获取的时候,都可以直接从连接池中进行获取.使用结束以后,将连接归还到池中.

例子:

老方式:生产出来,用完就销毁了

连接池方式 摩拜单车:骑之前, 有一个公司生产了很多的自行车, 需要骑车, 直接扫码使用就好了, 然后骑完之后, 还回去

2 .连接池原理

  • 程序一开始就创建一定数量的连接,放在一个容器(集合)中,这个容器称为连接池。
  • 使用的时候直接从连接池中取一个已经创建好的连接对象。
  • 关闭的时候不是真正关闭连接,而是将连接对象再次放回到连接池中。

3 编写标准的数据源(规范)

Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各
个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的
切换不同厂商的连接池!
常见的第三方连接池如下:C3P0,阿里巴巴-德鲁伊druid连接池

二.Druid 连接池

Druid是阿里巴巴开发的号称为监控而生的数据库连接池,Druid是国内目前最好的数据库连接池。在功能、性能、扩展性方面,都超过其他数据库连接池。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。如:一年一度的双十一活动,每年春运的抢火车票。

Druid的下载地址:https://github.com/alibaba/druid
1. 导入jar包 druid-1.1.12.jar
2. 定义配置文件

3. 加载配置文件
4. 获取数据库连接池对象
5. 获取连接

1. 编写 druid.properties

2 编写DBUtil工具类

三.JDBC小总结

属性建议值说明
url数据库的jdbc连接地址。一般为连接oracle/mysql。示例
如下:
mysql : jdbc:mysql://ip:port/dbname option1&option2&…
oracle : jdbc:oracle:thin:@ip:port:oracle_sid
password登录数据库的用户密码
username 登录数据库的用户名
initialSize10-50已足够启动程序时,在连接池中初始化多少个连接
maxActive连接池中最多支持多少个活动会话
maxWait 100程序向连接池中请求连接时,超过maxWait的值后,认为本次请求失败,即连接池 没有可用连接,单位毫秒,设置-1时表示无限等待
minEvictableIdleTimeMillis见说明部

池中某个连接的空闲时长达到 N 毫秒后, 连接池在下次检查空闲连接时,将 见说明部分回收该连接,要小于防火墙超时设置

net.netfilter.nf_conntrack_tcp_timeout_established的设置

属性建议值说明
timeBetweenEvictionRunsMillis检查空闲连接的频率,单位毫秒, 非正整数时表示不进行检查
keepAlitrue

程序没有close连接且空闲时长超过
minEvictableIdleTimeMillis,则会执行validationQuery指定的SQL,以保证该程序连接不会池kill掉,其范围不超

过minIdle指定的连接个数

minIdle与initialSize
相同
回收空闲连接时,将保证至少有minIdle个连接
removeAbandonedfalse,当发现
程序有
要求程序从池中get到连接后, N 秒后必须close,否则druid
会强制回收该
正常close连
接时设置为
true
连接,不管该连接中是活动还是空闲, 以防止进程不会进行
close而霸占连接
removeAbandonedTimeout应大于业务
运行最长时间
设置druid 强制回收连接的时限,当程序从池中get到连接
开始算起,超过值后,druid将强制回收该连接,单位秒。
 
logAbandonedtrue当druid强制回收连接后,是否将stack trace 记录到日志中
testWhileIdletrue当程序请求连接,池在分配连接时,是否先检查该连接是
否有效。(高效)
validationQuery检查池中的连接是否仍可用的 SQL 语句,drui会连接到数据
库执行该SQL, 如果正常返回,则表示连接可用,否则表示连接不可用
testOnBorrow false程序 申请 连接时,进行连接有效性检查(低效,影响性能) 
testOnReturn false程序 返还 连接时,进行连接有效性检查(低效,影响性能) 
poolPreparedStatementstrue

缓存通过以下两个方法发起的SQL:
public PreparedStatement prepareStatement(String
sql)
public PreparedStatement prepareStatement(String
sql)


int resultSetType

int resultSetConcurrency

maxPoolPrepareStatementPerConnectionSize20每个连接最多缓存多少个SQL 
filters stat,wall,slf4j这里配置的是插件,常用的插件有:
监控统计: filter:stat
日志监控: filter:log4j 或者 slf4j
防御SQL注入: filter:wall
connectProperties

连接属性。比如设置一些连接池统计方面的配置。
druid.stat.mergeSql=

true;druid.stat.slowSqlMillis=5000
比如设置一些数据库连接属性


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值