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