For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
Java编程开发语言随着互联网的不断发展而被越来越多的程序员掌握,今天我们就通过案例分析来简单了解一下,Java编程连接池概念与应用分析。
连接池存在的原因和线程池大概类似,因为数据库连接的获取是有开销的,频繁获取、关闭数据库连接会带来不必要的开销,影响系统性能。所以就有了数据库连接池。
数据库连接池技术提前创建好数据库连接,并对数据库连接进行池化管理:连接创建好之后交给连接池,应用需要连接的时候直接从连接池获取、而不需要创建连接,使用完之后归还给连接池、而不是关闭连接。从而减少频繁创建、关闭数据库连接锁带来的开销,极大提高系统性能。
今天从HikariPool开始,从源码角度学习了解数据库连接池的实现原理。HikariPool是目前公认性能好的数据库连接池,同时也是SpringBoot2.0以后的默认连接池,相信今后会有越来越多的公司和项目使用HikariPool连接池。
关于数据库连接池的基本认知
先对数据库连接池的基本工作原理做个了解,不管是HikariPool、还是druid,所有的数据库连接池应该都是按照这个基本原理工作和实现的,带着这个思路去学习数据库连接池,避免盲人摸象。
数据库连接池一定会包含以下基本逻辑:
创建连接并池化:初始化的时候创建、或者是在应用获取连接的过程中创建,连接创建好之后放在连接池(内存中的容器,比如List)中保存。
获取数据库连接:接管了获取数据库连接的方法,从连接池中获取、而不是创建连接。
关闭数据库连接:接管了关闭数据库连接的方法,将连接归还到连接池、而不是真正的关闭数据库连接。
连接池维护:连接池容量、连接超时清理等工作。
houseKeeperTask
是一个周期性线程池ScheduledExecutorService,初始化的时候创建,定时(housekeepingPeriodMs)执行,清理掉(关闭)连接池中多余的(大于小空闲数)空闲连接,如果连接池中的连接数没有达到参数设置的数量(大连接数、或者空闲连接没有达到小空闲连接数)则创建连接。
HikariProxyConnection
HikariProxyConnection是数据库连接Connection的扩展类,应用层通过getConnection方法获取到的数据库连接其实不是不是数据库连接Connection、而是这个扩展类HikariProxyConnection。
使用扩展类HikariProxyConnection、而不是原生的数据库连接Connection的一个直观的理由是,对于数据库连接池来说,连接的关闭方法close不是要关闭连接、而是要把连接交还给连接池。使用扩展类(或者代理类)就可以很容易的重写其close方法实现目标,而如果直接使用原生Connection的话,就没办法控制了。
closeConnectionExecutor
数据库连接池需要关闭的时候,通过closeConnectionExecutor线程池提交,关闭连接后closeConnectionExecutor还负责调用fillPool(),根据需要填充连接池。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。