2017-06-12 114 views
0

HikariCP數據源可以用懶惰配置啓動嗎?HikariCP懶惰與春天LazyConnectionDataSourceProxy

爲此,我使用Spring LazyConnectionDataSourceProxy

<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig" lazy-init="true"> 
    <property name="poolName" value="TargetHikariCP" /> 
    <property name="dataSourceClassName" value="oracle.jdbc.pool.OracleDataSource" /> 
    <property name="connectionInitSql" value="SELECT 1 FROM DUAL"/> 
    <property name="leakDetectionThreshold" value="300000"/> 
    <property name="minimumIdle" value="1"/> 
    <property name="maximumPoolSize" value="10"/> 
    <property name="autoCommit" value="false"/> 
    <property name="dataSourceProperties"> <props> ... </props> </property> 
</bean> 

<bean id="dataSourceLazy" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close" lazy-init="true"> 
    <constructor-arg ref="hikariConfig" /> 
</bean> 

<bean id="dataSource" 
    class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy"> 
    <property name="targetDataSource" ref="dataSourceLazy" /> 
</bean>  


<bean id="txManager" 
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager" lazy-init="true"> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 

儘管如此,它並不工作,因爲數據源在項目啓動時啓動。

使用org.springframework.jdbc.datasource.DriverManagerDataSource時的相同配置可正常工作。

+0

不,因爲HikariCP是一個適當的連接池,它將在啓動過程中獲取連接。 'DriverManagerDataSource'不是連接池,因此在需要時創建與數據庫的連接(這通常是一個耗時的過程)。 –

回答

0

HikariCP有一個屬性,initializationFailFast,控制池是否會「快速失敗」如果池無法成功初始連接播種:

此屬性控制是否池會「如果該池無法成功初始化連接,則「快速失敗」。如果您希望應用程序在數據庫關閉/不可用時啓動,請將此屬性設置爲false。默認值:true

此屬性記錄在他們的網站中,但是2.6.2版本沒有,但它似乎仍支持。

在我的使用案例中,使用這個屬性應該足以解決我的問題。