JDBC DataSource工作原理:getConnection()是否调用DriverManager.getConnection?
DataSource.getConnection() 工作机制及你的推测是否正确?
你的推测不完全正确,得看具体的 DataSource 实现:
非池化的 DataSource 实现(比如
DriverManagerDataSource):这种确实每次调用getConnection()时,都会直接调用DriverManager.getConnection(),用你配置的 URL、用户名、密码创建全新的数据库连接,用完就直接关闭,没有复用逻辑。这时候你的推测是对的。池化的 DataSource 实现(比如 HikariCP、C3P0、Apache DBCP 这些主流连接池):这种不会每次都调用
DriverManager.getConnection()。它会提前初始化一批连接放在连接池里,当你调用getConnection()时,优先从池里取空闲的连接返回;只有当池里没有空闲连接且连接数还没到上限时,才会调用DriverManager.getConnection()创建新连接。而且你用完调用close()时,并不是真的关闭连接,而是把连接放回池里留着下次复用。这时候你的推测就不成立了。
简单说,DataSource 是 JDBC 定义的标准接口,不同厂商的实现逻辑差异很大,核心区别就是是否做连接池的复用管理。
内容的提问来源于stack exchange,提问作者Andrzej Jankowski
相关产品推荐
相关产品推荐

