Я столкнулся с похожими проблемами, и это было решено с помощью следующих шагов
Закрыть все ресурсы базы данных в правильной последовательности
resultSet.close();
statement.close();
connection.close();
Различные драйверы реализованы по-разному, некоторые драйверы все равно будут подключены к соединению, если базовый набор результатов не закрыт.
- Необходимо настроить значения по умолчанию для Apache DBCP
dataSource.setDefaultAutoCommit(true);<br>
dataSource.setMaxActive(700); // make sure db server has it 800
dataSource.setRemoveAbandoned(true);
dataSource.setTestOnBorrow(true);
dataSource.setLogAbandoned(true);
dataSource.setTestWhileIdle(true);
dataSource.setTestOnReturn(true);
dataSource.setRemoveAbandonedTimeout(60);
Убедитесь, что сервер базы данных может разрешить как минимум 50+ подключений больше, чем число, указанное в setMaxActive
, поскольку dbcp сначала дает x
новых подключений, а затем пытается очистить подключения, превышающие setMaxActive
число. При очистке dbcp показывает, какие соединения не были закрыты в журнале / консоли сервера.