亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

強制 Hikari/Hibernate 關閉陳舊(泄漏?)連接

強制 Hikari/Hibernate 關閉陳舊(泄漏?)連接

catspeake 2021-09-29 17:16:42
我正在使用帶有 Hibernate 5.3 和 Hikari 2.7 的 Spring Boot 2 中的官方 JDBC 驅動程序使用 FileMaker 16 數據源。FileMaker 服務器性能較差,對于大表,SQL 查詢執行時間可達一分鐘。有時會導致連接泄漏,因為連接池中充滿了永遠不會釋放的活動連接。問題是如何強制池中已經掛在那里兩分鐘的活動連接關閉,將它們移動到空閑狀態并再次使用。例如,我使用以下findAll方法通過 RestController 訪問 FileMaker 數據源org.springframework.data.repository.PagingAndSortingRepository:@RestControllerpublic class PatientController {    @Autowired    private PatientRepository repository;    @GetMapping("/patients")    public Page<Patient> find(Pageable pageable) {        return repository.findAll(pageable);    }}/patients在 raw 中調用幾次會導致連接泄漏,這是 Hikari 報告的內容:2018-09-20 13:49:00.939 調試 1 --- [l-1 管家] com.zaxxer.hikari.pool.HikariPool :HikariPool-1 - 池統計(總計 = 10,活動 = 10,空閑 = 0,等待=2)它還會拋出這樣的異常:java.lang.Exception: Apparent connection leak detectedat com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128) ~[HikariCP-2.7.9.jar!/:na]我需要的是,如果repository.findAll需要超過 N 秒,則必須終止連接并且控制器方法必須拋出異常。如何實現?
查看完整描述

2 回答

?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

HikariCP 只專注于連接池管理來管理它從中形成的連接。

loginTimeout - HikariCP 將等待與數據庫建立連接的時間(基本上是 JDBC 連接)

spring.datasource.hikari.connectionTimeout=30000

maxLifetime - 連接在關閉前會在池中存活多久

spring.datasource.hikari.maxLifetime=1800000

idleTimeout - 未使用的連接在池中存在多長時間

spring.datasource.hikari.idleTimeout=30000

如果請求時間超過定義的超時時間,請使用 javax.persistence.query.timeout 取消請求。

javax.persistence.query.timeout(長 - 毫秒)

javax.persistence.query.timeout 提示定義了查詢在被取消之前允許運行多長時間。Hibernate 本身不處理此超時,而是通過 JDBC Statement.setTimeout 方法將其提供給 JDBC 驅動程序。


查看完整回答
反對 回復 2021-09-29
  • 2 回答
  • 0 關注
  • 433 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號