HikariCP连接池的集成是在SpringBoot项目下实现的。在访问数据库时,我们需要通过TCP协议与数据库建立连接。使用后,我们需要释放连接。TCP协议是面向连接的协议。这个过程很耗时。如果频繁访问数据库,每次都会直接和数据库建立连接,会带来很大的性能问题。连接池是池化思想的一种应用。它是基于享元模式实现的,就是在内存中开辟一块区域来存放创建的连接,使得连接可以被复用,从而提高数据库的访问性能。连接池必须遵守java.sql.DataSource的规范,通过它可以得到连接池的具体实现,可以得到连接与数据库通信。连接池的缺点:会带来一定的内存开销。在以空间换时间耦合DataSource时,spring注入HikariDataSource,获取的连接是从HikariPool连接池中获取的。HikariPool存储结构:通过ConnectionBag-ConcurrentBag来存储连接。ConcurrentBag底层使用的是CopyOnWirteArrayList。CopyOnWirteArrayList就是在更新pool之前先做一个copy,然后写回来的时候比较版本。如果版本一致,就写回去,否则不更新。这样做是为了在减少阻塞的前提下保证线程安全。
