Oracle连接池需要花费大量时间进行首次调用

时间:2015-04-24 10:30:59

标签: spring oracle spring-mvc odbc

在春天,我有一个以这种方式定义的数据源:

<bean id="dataSource" class="oracle.jdbc.pool.OracleDataSource" destroy-method="close"> 
    <property name="URL" value="${jdbc.url}" /> 
    <property name="user" value="${jdbc.username}"/> 
    <property name="password" value="${jdbc.password}"/> 
    <property name="connectionCachingEnabled" value="true"/> 
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>

这个数据源由我的REST服务使用,一切正常......无论如何,第一次REST调用非常慢(约5秒),之后每个其他调用都很快。

我认为这是一个与初始化相关的问题,因为在收到第一个DB调用时会进行初始化。 有没有办法告诉spring在服务器启动时初始化这个数据源?

1 个答案:

答案 0 :(得分:1)

  

我认为这是一个与初始化相关的问题,在某种意义上说   在收到第一个DB调用时进行初始化。

使用您当前的配置,我认为这是正在发生的事情。

  

有没有办法告诉spring在服务器上初始化这个数据源   启动?

这是连接池的行为,而不是Spring。 Spring会在你的应用程序启动时创建bean(你没有在bean上使用lazy-init="true")。但是,当Spring实例化时,连接池不会创建与数据库的连接。来自Oracle docs

  

初始池大小属性指定可用的数量   最初连接池时创建的连接   创建或重新初始化。此属性通常用于减少   将游泳池灌注到最佳尺寸所产生的加速时间。

     

值为0表示未预先创建任何连接。该   默认值为0.

尝试为initialPoolSize设置非零值。

修改:请尝试设置ConnectionCacheProperties

<property name="connectionCacheProperties">
    <props merge="default">
        <prop key="InitialLimit">5</prop>
    </props>
</property>