带着疑问去看连接池问题:
  1. 连接池用于哪些方面?
  2. 什么情况下需要用到连接池?
  3. 连接池的出现是基于什么背景创建的?
  4. 连接池相对于正常创建流程在哪些方面有优势?
  5. 正常创建数据库连接对资源的损耗体现在哪里?~~~~
    连接池主要应用于需要频繁创建数据库连接的场景,它的出现是为了节约正常连接下所消耗的时间,实现高效,安全的连接复用。
    在正常访问数据库时,某些时候需要以各种方式频繁访问数据库,如果我们在每一次操作时都执行一次连接创建,又要基于线程消耗不断的销毁已经用过的连接,在这个过程中显然会消耗很多资源,数据库与jdbc的连接与销毁需要经过三次握手与四次挥手,其所消耗的时长或许要高于所传递信息执行的时间。
    以连接池的方式去建立连接可以有效的减少时间上的消耗,因为连接池会保存与数据库之间的连接,廖雪峰的官方网站上对连接池的描述是:一开始,连接池内部并没有连接,所以,第一次调用ds.getConnection(),会迫使连接池内部先创建一个Connection,再返回给客户端使用。当我们调用conn.close()方法时(在try(resource){...}结束处),不是真正“关闭”连接,而是释放到连接池中,以便下次获取连接时能直接返回。
    我对这段话的理解为连接池会保存当前已经使用完的连接,也就是close之后的连接,(把正常流程下应该close掉的连接保存起来并标记为空闲)这样一来就省去了这部分的销毁时间,而在下次需要连接时又可以将空闲的连接发布出去,这样又节省了创建的时间,随着连接的不断更新创建,连接池中就会有一定的存储量,而又因为只有连接池中的连接不够用时它才会去创建新的连接。又可以一定程度上实现资源的合理利用。

    在spring Boot2中已经默认使用HikariCP,所以 HikariCP 会默认在 spring-boot-starter-jdbc 中附加依赖,因此不需要主动添加 HikariCP 的依赖。~~~~


易志杰
4 声望0 粉丝