springboot 運行一段時間之后無法獲取到數據庫連接,后續排查是2個問題引起
-
HttpClient 連接池配置連接數太少,而且使用 CloseableHttpClient 后沒有關閉 CloseableHttpResponse,導致線程阻塞,事務無法結束,數據庫連接沒有還給連接池
response.close(); @Bean(name = "httpClientConnectionManager") public PoolingHttpClientConnectionManager getHttpClientConnectionManager(){ PoolingHttpClientConnectionManager httpClientConnectionManager = new PoolingHttpClientConnectionManager(); httpClientConnectionManager.setMaxTotal(100); httpClientConnectionManager.setDefaultMaxPerRoute(100); return httpClientConnectionManager; }
- 數據庫連接數配置沒有生效,build的數據源沒有讀取配置文件
maximum-pool-size: 50
@Bean @Primary @ConfigurationProperties(prefix = "spring.datasource") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); }
-
- 修改如下,問題解決
@Bean @Primary @ConfigurationProperties(prefix = "spring.datasource.hikari") public HikariDataSource dataSource(DataSourceProperties properties) { HikariDataSource dataSource = properties.initializeDataSourceBuilder().type(HikariDataSource.class).build(); if (StringUtils.hasText(properties.getName())) { dataSource.setPoolName(properties.getName()); } return dataSource; }
- 修改如下,問題解決