浅谈数据库连接池

第一代连接池

区分一个数据库连接池是属于第一代产品还是第二代产品的一个最重要特征就是看它在架构和设计时采用的线程模型,因为这直接影响的并发环境下存取数据库连接的性能。

一般来讲采用单线程同步的架构设计的都属于第一代连接池,而采用多线程异步架构的则属于第二代。比较有代表性的就是 Apache Commons DBCP,在 1.x 版本中,一直延续这单线程设计模型,到 2.x 版本才采用多线程模型。

已经彻底死掉的 c3p0 和 proxool

c3p0 在很长一段时间内,它一直是 Java 领域内数据库连接池的代名词,当年盛极一时的 Hibernate 都将其作为内置的数据库连接池。c3p0 功能简单易用,稳定性好这,但性能很差,最致命的问题就是架构设计过于复杂。

<bean name="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${jdbc.driver}"></property>
    <property name="jdbcUrl" value="${jdbc.url}"></property>
    <property name="user" value="${jdbc.username}"></property>
    <property name="password" value="${jdbc.password}"></property>
</bean>

maven

<!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
<dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>${c3pc.version}</version>
</dependency>

proxool 由于产品作者兴趣的缺失,让这款本来很有潜力的产品早早夭折。

咸鱼翻身的dbcp

This chapter requires login to view full content. You are viewing a preview.

Login to View Full Content

Course Curriculum

3

框架与 I/O:Spring、Netty 与 Web 容器

理解 Spring Boot 自动装配、AOP 与事务原理,掌握 Netty Reactor 模型及 Tomcat 连接处理机制,构建高内聚、易扩展的应用服务层。
4

高性能中间件:消息、缓存与存储

熟练运用 MySQL 索引/事务、Redis 缓存策略、Kafka/RocketMQ 消息可靠性,以及 ZooKeeper 分布式协调,搭建稳定、解耦的分布式数据底座。
6

云原生:容器化、可观测性与工程效能

通过 Docker/K8s 实现弹性部署,集成 Metrics/Logs/Traces 构建可观测体系,推动 DevOps 与自动化,让架构在云上持续交付与进化。