我正在使用带有 Hibernate 5.3 和 Hikari 2.7 的 Spring Boot 2 中的官方 JDBC 驱动程序使用 FileMaker 16 数据源。
FileMaker 服务器性能较差,对于大表,SQL 查询执行时间可达一分钟。有时会导致连接泄漏,因为连接池中充满了永远不会释放的活动连接。
问题是如何强制池中已经挂在那里两分钟的活动连接关闭,将它们移动到空闲状态并再次使用。
例如,我使用以下findAll方法通过 RestController 访问 FileMaker 数据源org.springframework.data.repository.PagingAndSortingRepository:
@RestController
public 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 detected
at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:128) ~[HikariCP-2.7.9.jar!/:na]
我需要的是,如果repository.findAll需要超过 N 秒,则必须终止连接并且控制器方法必须抛出异常。如何实现?
慕神8447489
相关分类