1. 程式人生 > >spring boot訪問資料Connection is not available【原創】

spring boot訪問資料Connection is not available【原創】

今天在執行自己的專案發現一個問題,有些讀取資料庫能正常訪問,有些讀取資料庫拒絕連線,發現把spring事務取消掉,就能正常讀取資料,提示如下錯誤訊息:

HikariPool-1 - Connection is not available, request timed out after 30096ms

經過幾天的不懈努力,終於解決了這個問題。

因為我使用的是如下程式碼來連線資料庫:

@PersistenceContext(type = PersistenceContextType.EXTENDED)
private EntityManager entityManager;

導致事務讀取資料後並且釋放連線,而這些連線依然存在資料庫連線池中,導致再次請求資料的時候,因為連線已經失效或者關閉,就會提示上面的錯誤。

百度、google最後找到解決辦法,這裡先是說明一下,因為使用HikariPool連線池一直沒有解決問題,我換成了DBCP2連線池,問題原因也是一樣,解決方式大致一樣,只不過是配置項名稱不同吧了:

spring.datasource:
  type: org.apache.commons.dbcp2.BasicDataSource
  dbcp2:
      default-auto-commit: true
      initial-size: 30
      max-total: 120
      max-idle: 120
      min-idle: 30
      max-wait-millis: 10
      validation-query: 'SELECT 1'
      validation-query-timeout: 3
      test-on-borrow: true
      test-while-idle: true
      time-between-eviction-runs-millis: 10000
      num-tests-per-eviction-run: 10
      min-evictable-idle-time-millis: 120000
      remove-abandoned-on-borrow: true
      remove-abandoned-timeout: 120
      pool-prepared-statements: true

現在將配置項的詳細配置說明貼在如下:

注意:文章到這裡還沒有完,由於篇幅限制,完整內容請到hongfu951部落格上檢視