org.springframework.jdbc.datasource.DriverManagerDataSource 优于 oracle.jdbc.pool.OracleDataSource

Posted

技术标签:

【中文标题】org.springframework.jdbc.datasource.DriverManagerDataSource 优于 oracle.jdbc.pool.OracleDataSource【英文标题】:Advantage of org.springframework.jdbc.datasource.DriverManagerDataSource over oracle.jdbc.pool.OracleDataSource 【发布时间】:2015-07-28 07:56:19 【问题描述】:

我目前在我的项目中使用此配置:

<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource"
    destroy-method="close">
        <property name="URL" ...
         <property name="user" ...
        <property name="password" ...
        <property name="connectionCachingEnabled" value="true" />

而且它运行良好,速度非常快。 我碰巧在一个旧项目(spring 2.5)上看到了这个配置:

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName">
        <value>oracle.jdbc.driver.OracleDriver</value>
    </property>
    <property name="url"...
    <property name="username" ...
    <property name="password" ...
</bean>

从文档看来,最后一个选项没有使用连接池。我认为没有理由使用此配置而不是我的配置,但它仍然存在,所以我很好奇:优势/限制在哪里?

【问题讨论】:

我不认为有任何优势 - 文档本身非常清楚地表明这在现实生活中的使用非常有限。限制是它不使用任何类型的池,因此每次您请求连接时,都会请求新的物理连接。唯一可能的实际用途是(据我所知)如果您有一个单线程程序能够建立一次连接并在其整个生命周期内使用它。你所获得的只是你不会有建立连接池的内存占用。 【参考方案1】:

第一个配置是特定于 oracle 的,而第二个配置是通用的。您可以显式定义驱动程序类。 除了 OracleDataSource 的连接池支持之外,这是我能看到的唯一主要区别。

您可以将它用于如下所述的一般行为:

<bean id="baseDataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource"
abstract="true">
<property name="username" value="user"/>
<property name="password" value="pwd" />
</bean>

<bean id="mysqlDataSource" parent="baseDataSource">
<property name="driverClassName" value="$mySQL.driver" />
<property name="url" value="$mySQL.url"/>
</bean>

<bean id="oracleDataSource" parent="baseDataSource">
<property name="driverClassName" value="$oracle.driver" />
<property name="url" value="$oracle.url"/>
</bean>

您可以外化的属性值。

您可以探索具有 DriverManagerDataSource 的所有功能的 Apache Jakarta Commons DBCP 以及连接池功能。

【讨论】:

是否也可以在“driverClassName”中定义该类以维护通用容器但特定行为? 编辑了我原来的帖子。你可以看看。

以上是关于org.springframework.jdbc.datasource.DriverManagerDataSource 优于 oracle.jdbc.pool.OracleDataSource的主要内容,如果未能解决你的问题,请参考以下文章

org.springframework.jdbc.support.MetaDataAccessException:Spring Boot 中的 JDBC DatabaseMetaData 方法

Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection

org.springframework.jdbc.UncategorizedSQLException: PreparedStatementCallback;未分类的 SQLException

如何使用 org.springframework.jdbc.object 实现可重用的 ddl 语句?

org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection

org.springframework.jdbc.BadSqlGrammarException: Error updating database