DataSource和ConnectionPoolDataSource之间的区别

5

1
这个链接可能会有所帮助:这里。引用内容如下:“这两者中的后者支持连接池,而前者不支持。这实际上意味着 ConnectionPoolDataSource 可以为您提供一个 PooledConnection。” - mwerschy
但是为什么MySQL手册使用"javax.sql.DataSource"来创建连接池,而不是"javax.sql.ConnectionPoolDataSource"?我看过一些文章,有的使用DataSource,有的使用ConnectionPoolDataSource来创建连接池。为什么他们在不支持连接池的情况下使用DataSource呢? - user1911467
请参阅以下链接:https://dev59.com/NGLVa4cB1Zd3GeqPwGpV - DannyMo
@mwerschy:这个假设是不正确的。应用服务器使用自己的连接池,而不是使用由JDBC驱动程序实现的本地连接池,例如PooledConnection,就像javax.sql.ConnectionPoolDataSource所做的那样。 - Tiny
2个回答

0
在GlassFish和MySQL的背景下,通常在设置连接池时会使用javax.sql.ConnectionPoolDataSource,因为它专门设计用于高效地管理连接池。GlassFish将使用ConnectionPoolDataSource实现来处理连接池的配置和管理。
关键区别在于,DataSource是一个更高级的接口,用于在一般应用程序中获取数据库连接,而ConnectionPoolDataSource是一个更低级的接口,专为在连接池管理中使用,特别是在应用服务器中或者当您希望对连接池行为进行细粒度控制时。

-2
ConnectionPoolDataSource只是一个具有连接池功能的DataSource(因为它继承了CommonDataSource,而CommonDataSource也被DataSource继承)
你问道:我不知道要使用哪种资源类型

这取决于你的应用程序,许多数据库驱动程序在与数据库创建新连接时需要很长时间。如果你的应用程序将频繁地创建太多的连接,那么请使用连接池。


3
你的说法是不正确的:ConnectionPoolDataSource 并不是 DataSource。你甚至自己也说了(正确地)它们都继承自 CommonDataSource,这意味着它们之间没有一个“is-a”的关系(即继承关系)。这个回答只会让本来已经很混乱的问题更加复杂,没有增加任何价值。 - Basil Bourque

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接