spring boot訪問資料Connection is not available【原創】
阿新 • • 發佈:2018-12-21
今天在執行自己的專案發現一個問題,有些讀取資料庫能正常訪問,有些讀取資料庫拒絕連線,發現把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部落格上檢視