当前位置: 首页 > 面试题库 >

Application Server JDBC资源的DataSource或ConnectionPoolDataSource

翟京
2023-03-14
问题内容

在应用程序服务器中创建JNDI
JDBC连接池时,我始终将类型指定为javax.sql.ConnectionPoolDataSource。我从来没有考虑过太多,因为与非池化连接相比,更喜欢池化连接似乎很自然。

但是,在查看一些示例(专门针对Tomcat)时,我注意到它们指定了javax.sql.DataSource。此外,似乎还有设置maxIdlemaxWait给人的印象是这些连接也被合并。无论选择的数据源类型如何,Glassfish都允许这些参数。

  • 是否javax.sql.DataSource集中在应用程序服务器(或servlet容器)中?
  • 什么(如果有的话)的优势在那里为选择javax.sql.ConnectionPoolDataSourcejavax.sql.DataSource(反之亦然)?

问题答案:

是的,默认情况下,Tomcat确实对定义为JNDI上下文资源的数据源使用Apache DBCP池。

从位于http://tomcat.apache.org/tomcat-7.0-doc/jndi-resources-
howto.html#JDBC_Data_Sources的
文档中

注意-
Tomcat中的默认数据源支持基于Commons项目中的DBCP连接池。但是,可以通过编写您自己的自定义资源工厂来使用实现javax.sql.DataSource的任何其他连接池,如下所述。

挖掘Tomcat 6的消息源显示,它们以这种方式获取连接工厂(以防万一,如果您不使用Context的“ factory”属性指定自己的连接工厂):

ObjectFactory factory = (ObjectFactory)Class.forName(System.getProperty("javax.sql.DataSource.Factory", "org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory")).newInstance();
实现javax.naming.spi.ObjectFactory的org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory负责创建DataSource实例:[http]( http://www.jarvana.com/jarvana/view/org/apache/tomcat/tomcat-
dbcp/7.0.2/tomcat-
dbcp-7.0.2-sources.jar!/org/apache/tomcat/dbcp/dbcp/BasicDataSourceFactory.java?format=ok)
//www.jarvana.com/jarvana/view/org/apache/tomcat/tomcat- dbcp / 7.0.2 /
tomcat-
dbcp-7.0.2-sources.jar!/org/apache/tomcat/dbcp/dbcp/BasicDataSourceFactory.java?format
= ok
我看到他们创建了org.apache.tomcat.dbcp.dbcp.BasicDataSource的实例:[http]( http://www.jarvana.com/jarvana/view/org/apache/tomcat/tomcat-
dbcp/7.0.2/tomcat-
dbcp-7.0.2-sources.jar!/org/apache/tomcat/dbcp/dbcp/BasicDataSource.java?format=ok)
//www.jarvana.com/jarvana/view/org/apache/tomcat/tomcat-dbcp/7.0.2/tomcat-
dbcp-
7.0.2-sources.jar!/org/apache/tomcat/dbcp/dbcp/BasicDataSource.java?format =
ok

奇怪的是,此类本身并没有实现ConnectionPoolDataSource,org.apache.tomcat.dbcp.dbcp.PoolingDataSource也没有实现,它由BasicDataSource内部返回
http://www.jarvana.com/jarvana/view/org/apache/tomcat /tomcat-
dbcp/7.0.2/tomcat-
dbcp-7.0.2-sources.jar!/org/apache/tomcat/dbcp/dbcp/PoolingDataSource.java?format=ok

因此,我假定当您将DataSources配置为javax.sql.ConnectionPoolDataSource时,您还使用了一些自定义工厂(这只是一个猜测,但我想否则您将在Tomcat中具有类强制转换异常,因为它们的池并没有真正提供javax.sql.ConnectionPoolDataSource的实例,仅javax.sql.DataSource的实例)。

因此,要回答有关特定情况的优缺点的问题,应将Apache DBCP与数据源工厂中的池化机制进行比较,无论使用哪种方式。



 类似资料:
  • 我正在尝试按照本指南创建一个为我提供数据源对象的Bean,但是当我尝试访问数据源时,例如这样: 我得到这个错误: 我多次编辑我的代码,因为我读过各种各样的例子,它们总是略有不同。 这是src/main/resources文件夹中的application.properties文件: 这是我的依赖关系: 有人知道我错在哪里吗??谢谢你

  • 到目前为止,我们在使用QueryRunner时使用了连接对象。 我们也可以无缝地使用数据源。 以下示例将演示如何在QueryRunner和数据源的帮助下使用Read查询读取记录。 我们将从Employees Table中读取记录。 语法 (Syntax) QueryRunner queryRunner = new QueryRunner( dataSource ); Employee emp =

  • RESTful 的 API 都是关于访问和操作 资源,可将资源看成 MVC 模式中的 模型 在如何代表一个资源没有固定的限定,在 Yii 中通常使用 yii\base\Model 或它的子类(如 yii\db\ActiveRecord) 代表资源,是为以下原因: yii\base\Model 实现了 yii\base\Arrayable 接口, 它允许你通过 RESTful API 自定义你想要公

  • Yii 中的资源是和 Web 页面相关的文件,可为 CSS 文件,JavaScript 文件,图片或视频等, 资源放在 Web 可访问的目录下,直接被 Web 服务器调用。 通过程序自动管理资源更好一点,例如,当你在页面中使用 yii\jui\DatePicker 小部件时, 它会自动包含需要的 CSS 和 JavaScript 文件, 而不是要求你手工去找到这些文件并包含, 当你升级小部件时,它