2017-06-12 160 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版本没有,但它似乎仍支持。

在我的使用案例中,使用这个属性应该足以解决我的问题。