JDBC - 数据库连接池

网友投稿 258 2022-09-16

JDBC - 数据库连接池

文章目录

​​数据库连接池简介​​​​数据库连接池实现​​​​Driud使用​​​​附:druid配置详解​​

数据库连接池简介

数据库连接池是个容器,负责分配、管理数据库连接(Connection)

它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;

释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏

使用数据库连接池的好处:

资源重用提升系统响应速度避免数据库连接遗漏

之前我们代码中使用连接是没有使用都创建一个Connection对象,使用完毕就会将其销毁。这样重复创建销毁的过程是特别耗费计算机的性能的及消耗时间的。

而数据库使用了数据库连接池后,就能达到Connection对象的复用,如下图

连接池是在一开始就创建好了一些连接(Connection)对象存储起来。用户需要连接数据库时,不需要自己创建连接,而只需要从连接池中获取一个连接进行使用,使用完毕后再将连接对象归还给连接池;这样就可以起到资源重用,也节省了频繁创建连接销毁连接所花费的时间,从而提升了系统响应的速度。

数据库连接池实现

标准接口:DataSource官方(SUN) 提供的数据库连接池标准接口,由第三方组织实现此接口。该接口提供了获取连接的功能:

Connection getConnection()

那么以后就不需要通过 ​​DriverManager​​​ 对象获取 ​​Connection​​​ 对象,而是通过连接池(DataSource)获取 ​​Connection​​ 对象。

常见的数据库连接池

DBCPC3P0Druid

我们现在使用更多的是Druid,它的性能比其他两个会好一些。

Druid(德鲁伊)

Druid连接池是阿里巴巴开源的数据库连接池项目功能强大,性能优秀,是Java语言最好的数据库连接池之一

Driud使用

导入jar包定义配置文件加载配置文件获取数据库连接池对象获取连接

编写配置文件如下(在src目录下加入properties文件):

driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql:///db1?useSSL=false&useServerPrepStmts=trueusername=rootpassword=1234# 初始化连接数量initialSize=5# 最大连接数maxActive=10# 最大等待时间maxWait=3000

使用druid的代码如下:

public class DruidDemo { public static void main(String[] args) throws Exception { //1.导入jar包 //2.定义配置文件 //3. 加载配置文件 Properties prop = new Properties(); prop.load(new FileInputStream("jdbc-demo/src/druid.properties")); //4. 获取连接池对象 DataSource dataSource = DruidDataSourceFactory.createDataSource(prop); //5. 获取数据库连接 Connection Connection connection = dataSource.getConnection(); System.out.println(connection); //获取到了连接后就可以继续做其他操作了 //System.out.println(System.getProperty("user.dir")); }}

附:druid配置详解

属性

说明

建议值

url

数据库的jdbc连接地址。一般为连接oracle/mysql。示例如下:

mysql : jdbc:mysql://ip:port/dbname?option1&option2&…

oracle : jdbc:oracle:thin:@ip:port:oracle_sid

username

登录数据库的用户名

password

登录数据库的用户密码

initialSize

启动程序时,在连接池中初始化多少个连接

10-50已足够

maxActive

连接池中最多支持多少个活动会话

maxWait

程序向连接池中请求连接时,超过maxWait的值后,认为本次请求失败,即连接池

100

没有可用连接,单位毫秒,设置-1时表示无限等待

minEvictableIdleTimeMillis

池中某个连接的空闲时长达到 N 毫秒后, 连接池在下次检查空闲连接时,将

见说明部分

回收该连接,要小于防火墙超时设置

net.netfilter.nf_conntrack_tcp_timeout_established的设置

timeBetweenEvictionRunsMillis

检查空闲连接的频率,单位毫秒, 非正整数时表示不进行检查

keepAlive

程序没有close连接且空闲时长超过 minEvictableIdleTimeMillis,则会执

true

行validationQuery指定的SQL,以保证该程序连接不会池kill掉,其范围不超

过minIdle指定的连接个数。

minIdle

回收空闲连接时,将保证至少有minIdle个连接.

与initialSize相同

removeAbandoned

要求程序从池中get到连接后, N 秒后必须close,否则druid 会强制回收该

false,当发现程序有未

连接,不管该连接中是活动还是空闲, 以防止进程不会进行close而霸占连接。

正常close连接时设置为true

removeAbandonedTimeout

设置druid 强制回收连接的时限,当程序从池中get到连接开始算起,超过此

应大于业务运行最长时间

值后,druid将强制回收该连接,单位秒。

logAbandoned

当druid强制回收连接后,是否将stack trace 记录到日志中

true

testWhileIdle

当程序请求连接,池在分配连接时,是否先检查该连接是否有效。(高效)

true

validationQuery

检查池中的连接是否仍可用的 SQL 语句,drui会连接到数据库执行该SQL, 如果

正常返回,则表示连接可用,否则表示连接不可用

testOnBorrow

程序 申请 连接时,进行连接有效性检查(低效,影响性能)

false

testOnReturn

程序 返还 连接时,进行连接有效性检查(低效,影响性能)

false

poolPreparedStatements

缓存通过以下两个方法发起的SQL:

true

public PreparedStatement prepareStatement(String sql)

public PreparedStatement prepareStatement(String sql,

int resultSetType, int resultSetConcurrency)

maxPoolPrepareStatementPerConnectionSize

每个连接最多缓存多少个SQL

20

filters

这里配置的是插件,常用的插件有:

stat,wall,slf4j

监控统计: filter:stat

日志监控: filter:log4j 或者 slf4j

防御SQL注入: filter:wall

connectProperties

连接属性。比如设置一些连接池统计方面的配置。

druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000

比如设置一些数据库连接属性:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MySQL高级②(数据库设计)
下一篇:公关界007:滴滴豪华车年末走心营销,教你如何款待重要的人!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~