簡體   English   中英

HikariCP Lazy with Spring LazyConnectionDataSourceProxy

[英]HikariCP Lazy with Spring LazyConnectionDataSourceProxy

HikariCP 數據源可以使用 Lazy 配置啟動嗎?

為此,我正在使用 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 時,可以正常工作。

在版本 > 3 中我們可以設置setInitializationFailTimeout(-1);

根據文檔:

  • 任何大於零的值都將被視為池初始化的超時。調用線程將被阻止繼續,直到成功連接到數據庫,或者直到達到超時。 如果達到超時,則將拋出PoolInitializationException
  • 在無法獲得連接的情況下,零值不會阻止池啟動。 但是,在啟動時,池將嘗試獲取連接並驗證connectionTestQueryconnectionInitSql是否有效。 如果這些驗證失敗,則會拋出異常。 如果無法獲取連接,則跳過驗證,池將啟動並在后台繼續嘗試獲取連接。 這可能意味着DataSource#getConnection()調用者可能會遇到異常。
  • 小於零的值將繞過啟動期間的任何連接嘗試和驗證,因此池將立即啟動。 池將繼續嘗試在后台獲取連接。 這可能意味着DataSource#getConnection()調用者可能會遇到異常。

HikariCP 有一個屬性, initializationFailFast ,它控制池是否會“快速失敗”,如果池不能被初始連接成功播種:

此屬性控制池是否會“快速失敗”,如果池無法成功地設置初始連接的種子。 如果您希望應用程序即使在數據庫關閉/不可用時也能啟動,請將此屬性設置為 false。 默認值:真

這個屬性在他們的站點中有記錄,但每個版本 2.6.2 沒有,但它似乎仍然受支持。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM