Ваш код создает новый ConnectionPool
для каждого запроса. Новый ConnectionPool
создает собственный новый пул потоков для выполнения запросов и должен установить новое соединение с базой данных.
Это означает, что у вас фактически нет пула соединений. У вас просто есть много соединений, которые вы создаете и используете один раз. Кроме того, ошибка, insertError
, не закрывает пул.
В совокупности эти вещи означают, что не существует ограничения на количество потоков / соединений, которые могут быть созданы одновременно, за исключением ограничения, налагаемого вашей системой на то, сколько памяти вы можете выделить, или сколько сокетов вы можете открыть. Когда вы столкнетесь с одним из этих ограничений, все будет не очень красиво.
Это также означает, что каждая ошибка запроса приводит к утечке нескольких потоков и соединений (ConnectionPool
устанавливает 3 потока / соединения при запуске). После достаточного количества ошибок вы не сможете создавать больше потоков или соединений, поэтому вы больше не сможете запрашивать вашу базу данных. Ваш запрос прост, и вы можете подумать, что ошибки не очень вероятны, но MySQL имеет тенденцию отключать клиентов несколько случайным образом (и, возможно, вы хотя бы в какой-то степени это осознавали, поскольку вы добавили добавление ошибки сообщить об ошибке).
Предполагаемое использование ConnectionPool
состоит в том, чтобы создать одно (или два, или какое-то другое небольшое фиксированное число), а затем повторно использовать его для всех ваших запросов. Я не знаю, связаны ли эти проблемы с теми, которые вы изначально наблюдали, или нет, но, вероятно, это проблемы, которые вы должны решить.