2015-04-24 89 views
2

在春天,我有這樣定義的數據源:Oracle連接池需要花費大量的時間,第一次調用

<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秒),之後每個其他通話都很快。

我覺得這是一個初始化相關的問題,就是說當初次接收到第一個數據庫調用時會進行初始化。 有沒有辦法告訴spring在服務器啓動時初始化這個數據源?

回答

1

我認爲這是一個初始化相關的問題,從這個意義上說, 初始化時收到第一個數據庫調用。

與您目前的配置我認爲這就是發生了什麼。

有沒有辦法告訴spring初始化服務器上​​的這個數據源 啓動?

這是連接池的行爲,而不是Spring。 Spring在您的應用程序啓動時創建bean(您不在豆上使用lazy-init="true")。但是,Spring實例化連接池時不會創建與數據庫的連接。從Oracle docs

初始池大小屬性指定當連接池是最初創建 或重新初始化時創建可用 連接的數量。此屬性通常用於減少將池啓動至其最佳大小所引起的啓動時間。

值爲0表示沒有連接是預先創建的。 默認值爲0.

嘗試爲initialPoolSize設置一個非零值。

編輯:嘗試設置ConnectionCacheProperties代替:

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

奇怪的是屬性 「initialPoolSize」 無法識別... – Phate

相關問題