【问题标题】:How can I set a timeout on spring DriverManagerDataSource如何在 Spring DriverManagerDataSource 上设置超时
【发布时间】:2011-04-11 16:14:22
【问题描述】:

我们正在使用 Spring 框架(2.5 版)中的 DriverManagerDataSource 来汇集到 Oracle 的连接。但是,这些连接似乎没有定义任何超时 - 昨天,在紧急数据库重新启动后,我们有一个线程挂在数据库连接内部读取的套接字上。如何设置超时时间,比如 10 分钟,以便下次引发异常?

【问题讨论】:

    标签: java oracle spring jdbc


    【解决方案1】:

    我最终通过以下方式更改了 Spring 上下文中的 bean:

    <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" autowire="no">
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="connectionProperties">
            <props>
                <prop key="oracle.net.READ_TIMEOUT">60000</prop>
            </props>
        </property>
    </bean>
    

    我不知道它是否还有效。

    【讨论】:

      【解决方案2】:

      Oracle 有一个内置的连接池:oracle.jdbc.pool.OracleDataSource。我建议你直接使用它。 Oracle JDBC(10gR2,其他版本类似)的参考在http://download.oracle.com/docs/cd/B19306_01/java.102/b14355/toc.htm。兴趣点:

      【讨论】:

        【解决方案3】:

        如果您的 Oracle 驱动程序实现支持超时属性,您可以通过 getConnectionProperties().put(key, timeout) 将其传递给底层实现

        我假设您意识到DriverManagerDataSource 不是连接池?来自文档:

        注意:这个类不是真正的连接池;它实际上并没有 池连接。它只是用作 简单替换成熟的 连接池,实现相同 标准接口,但创建新的 每次通话都有连接。 [..] 如果你 外面需要一个“真正的”连接池 对于 J2EE 容器,考虑 Apache's Jakarta Commons DBCPC3P0.

        您可能也对OCI Connection Pooling感兴趣?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-01-23
          • 2019-06-02
          • 1970-01-01
          • 2020-11-27
          • 2014-12-14
          • 2012-10-29
          • 2015-10-16
          • 2010-11-19
          相关资源
          最近更新 更多