可以使用延迟配置启动HikariCP数据源吗?
为此,我正在使用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 :(得分:2)
在版本> 3中,我们可以设置setInitializationFailTimeout(-1);
根据文档:
PoolInitializationException
将被抛出。connectionTestQuery
和connectionInitSql
有效。如果这些验证失败,则出现异常
将被抛出。如果无法获得连接,则跳过验证
池将启动并继续尝试在
背景。这可能意味着DataSource#getConnection()
的呼叫者可能
遇到异常。DataSource#getConnection()
可能会遇到异常。答案 1 :(得分:0)
HikariCP有一个属性 initializationFailFast ,用于控制池是否会快速失败&#34;如果池无法成功初始连接播种:
此属性控制池是否会快速失败&#34;如果池无法成功初始连接。如果希望应用程序在数据库关闭/不可用时启动,请将此属性设置为false。默认值:true
此属性已记录在他们的站点中,但是根据2.6.2版本没有,但似乎仍然支持它。
在我的用例中,使用此属性应足以解决我的问题。