拜访数据库时咱们须要通过 TCP 协定与数据库建设连贯,应用完当前须要开释连贯,TCP 协定是一个面向连贯的协定,建设连贯须要“三次握手,四次挥手”,这个过程是比拟耗时的,如果频繁的拜访数据库,每次都是间接与数据库建设连贯,会带来很大的性能问题。
连接池是池化思维一种利用,基于享元模式做了落地的实现,就是在内存开拓一块区域,存储创立好的连贯,让这连贯失去重用,进而进步数据库的拜访性能。
连接池必须恪守 java.sql.DataSource 这个标准,通过这个标准获取连接池的具体实现,取到连贯与数据库通信。
连接池弊病: 会带来肯定的内存开销,以空间换工夫
耦合于 DataSource 时,spring 注入的是 HikariDataSource,获取连贯是在 HikariPool 连接池中获取的连贯。
HikariPool 存储构造:是通过 ConnectionBag-ConcurrentBag 来存储连贯,ConcurrentBag 底层是应用 CopyOnWirteArrayList,CopyOnWirteArrayList 是在更新池前先做拷贝,而后写回去时会比照版本,如果版本统一则写回去,否则不更新,这样做是在缩小阻塞的前提下保障线程平安,