【连接池】java连接池学习(一)

学习目标:

学习连接池的相关知识。

学习内容:

  • 为什么需要连接池?
    1、当并发量很低的时候,连接可以临时建立,但当服务吞吐量达到几百、几千的时候,建立连接connect和销毁连接close就会成为瓶颈,此时该如何优化呢?
    (1)当服务启动的时候,先建立好若干连接Array[DBClientConnection];
    (2)当请求到达的时候,再从Array中取出一个,执行下游操作,执行完放回;
    从而避免反复的建立和销毁连接,以提升性能。
    而这个对Array[DBClientConnection]进行维护的数据结构,就是连接池。
    ——采摘自:https://blog.csdn.net/wufaliang003/article/details/90746333
    2、 最原始的数据库使用就是打开一个连接并进行使用,使用过后一定要关闭连接释放资源。由于频繁的打开和关闭连接对jvm包括数据库
    都有一定的资源负荷,尤其应用压力较大时资源占用比较多容易产生性能问题。由此使用连接池的作用就显现出来,他的原理其实不复杂:
    先打开一定数量的数据库连接,当使用的时候分配给调用者,调用完毕后返回给连接池,注意返回给连接池后这些连接并不会关闭,而是
    准备给下一个调用者进行分配。由此可以看出连接池节省了大量的数据库连接打开和关闭的动作,对系统性能提升的益处不言而喻。 几个概念:
    最小连接–应用启动后随即打开的连接数以及后续最小维持的连接数。 最大连接数–应用能够使用的最多的连接数
    连接增长数–应用每次新打开的连接个数 举个例子说明连接池的运作:
    假设设置了最小和最大的连接为10,20,那么应用一旦启动则首先打开10个数据库连接,但注意此时数据库连接池的正在使用数字为0–因为你并没有使用这些连接,而空闲的数量则是10。然后你开始登录,假设登录代码使用了一个连接进行查询,那么此时数据库连接池的正在使用数字为1、空闲数为9,这并不需要从数据库打开连接–因为连接池已经准备好了10个给你留着呢。登录结束了,当前连接池的连接数量是多少?当然是0,因为那个连接随着事务的结束已经返还给连接池了。然后同时有11个人在同一秒进行登录,会发生什么:连接池从数据库新申请(打开)了一个连接,连同另外的10个一并送出,这个瞬间连接池的使用数是11个,不过没关系正常情况下过一会儿又会变成0。如果同时有21个人登录呢?那第21个人就只能等前面的某个人登录完毕后释放连接给他。这时连接池开启了20个数据库连接–虽然很可能正在使用数量的已经降为0,那么20个连接会一直保持吗?当然不,连接池会在一定时间内关闭一定量的连接还给数据库,在这个例子里数字是20-10=10,因为只需要保持最小连接数就好了,而这个时间周期也是连接池里配置的。
    ——采摘自:https://blog.csdn.net/m0_37893932/article/details/73930014
  • 现在常用连接池有哪些?
    通过百度查到,常用的连接池有以下这些:
    c3p0、dbcp、proxool、druid
    Spring 推荐使用dbcp;
    Hibernate 推荐使用c3p0和proxool;
    1、 DBCP:Apache
    DBCP(DataBase connection pool)数据库连接池。是Apache上的一个 java连接池项目,也是 tomcat使用的连接池组件。单独使用dbcp需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。dbcp没有自动的去回收空闲连接的功能。
    ——采摘自度娘:https://zhidao.baidu.com/question/873729864680886292.html
    2、 C3P0:
    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0是异步操作的,缓慢的JDBC操作通过帮助进程完成。扩展这些操作可以有效的提升性能。目前使用它的开源项目有Hibernate,Spring等。c3p0有自动回收空闲连接功能。
    ——采摘自度娘:https://zhidao.baidu.com/question/873729864680886292.html
    3、 Proxool:Sourceforge
    Proxool是一种Java数据库连接池技术。是sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。
    ——采摘自度娘:https://zhidao.baidu.com/question/873729864680886292.html
    4、druid
    Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。Druid是阿里巴巴开发的号称为监控而生的数据库连接池!
    (下面标红这块有点乱)
    同时Druid不仅仅是一个数据库连接池,它包括四个部分: Druid是一个JDBC组件,它包括三个部分(这一块没看明白): 基于Filter-Chain模式的插件体系。 DruidDataSource 高效可管理的数据库连接池。 SQLParser
    Druid的功能
    1、替换DBCP和C3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。
    2、可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。
    3、数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。
    4、SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-Logging、Log4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。
    5、扩展JDBC,如果你要对JDBC层有编程的需求,可以通过Druid提供的Filter机制,很方便编写JDBC层的扩展插件。
    所以Druid可以:
    1、充当数据库连接池。
    2、可以监控数据库访问性能
    3、获得SQL执行日志
  • springboot2.x推荐使用的连接池:HikariCP
    内容待补充

学习时间:

今天:2021年3月25日09:11:45


学习产出:

猜你喜欢

转载自blog.csdn.net/s1441101265/article/details/115194389