У меня есть программа на Java, состоящая примерно из 15 методов. И эти методы очень часто вызываются во время выполнения программы. На данный момент я создаю новое соединение в каждом методе и вызываю для них операторы (база данных настроена на другом компьютере в сети).
Я хотел бы знать следующее: должен ли я создать только одно соединение в основном методе и передать его в качестве аргумента всем методам, которым требуется объект соединения, поскольку это значительно уменьшит количество объектов соединений в программе вместо создания и закрытие соединений очень часто в каждом методе.
Я подозреваю, что я не очень эффективно использую ресурсы с текущим дизайном, и есть много возможностей для улучшения, учитывая, что эта программа может значительно расшириться в будущем.




Для этого вам следует использовать пул соединений.
Таким образом, вы можете запросить соединение и отпустить его, когда вы закончите с ним, и вернуть его в пул.
Если другой поток хочет новое соединение и оно уже используется, можно создать новое. Если никакой другой поток не использует соединение, его можно использовать повторно.
Таким образом, вы можете каким-то образом оставить свое приложение таким, какое оно есть (и не передавать соединение со всех сторон), и при этом правильно использовать ресурсы.
К сожалению, пулы соединений первого класса не очень просты в использовании в автономных приложениях (они используются по умолчанию на серверах приложений). Вероятно, микроконтейнер (например, Sping) или хороший фреймворк (например, Hibernate) могут позволить вам его использовать.
Однако их несложно запрограммировать с нуля.
:)
Этот поиск Google поможет вам узнать больше о том, как его использовать.
Пролистать
Вы можете либо передать соединение, либо еще лучше использовать что-то вроде Jakarta Database Connection Pooling. http://commons.apache.org/dbcp/
Да, вам следует подумать о повторном использовании подключений, а не создавать каждый раз новое. Обычная процедура:
Пара практических соображений:
Не могли бы вы пояснить, как здесь могут помочь подготовленные заявления?
@neilCoffey, если «отключение» соединений не рассматривается; Зачем нам нужно несколько подключений? одно единственное соединение может использоваться везде rit; поскольку объекты операторов всегда разные? Когда нам требуется множественное подключение в приложении?
Одно единственное соединение может использоваться для выполнения (теоретически) бесконечного количества запросов, как вы говорите. Но он может выполнять только один запрос за раз. В умеренно сложной системе обычно необходимо учитывать возможность одновременного выполнения нескольких запросов.
Если ваше приложение является однопоточным или выполняет все операции с базой данных из одного потока, можно использовать одно соединение. Предполагая, что вам не нужно несколько подключений по какой-либо другой причине, это была бы самая простая реализация.
В зависимости от вашего драйвера, также может быть возможно разделить соединение между потоками - это тоже было бы нормально, если вы уверены, что ваш драйвер не лжет о его потоковой безопасности. Дополнительную информацию см. В документации к вашему драйверу.
Обычно объекты ниже «Соединение» не могут безопасно использоваться из нескольких потоков, поэтому обычно не рекомендуется совместно использовать ResultSet, объекты Statement и т. д. Между потоками - безусловно, лучшая политика - использовать их в том же потоке, который их создал; это обычно легко, потому что эти объекты обычно не хранятся слишком долго.
Многие драйверы JDBC делают за вас пул соединений, поэтому в этом случае нет особых преимуществ от использования дополнительного пула. Я предлагаю вам проверить документацию для вашего драйвера JDBC.
Другой подход к пулам соединений -
В противном случае я бы предложил использовать пул соединений.
если «списание» подключений не рассматривается; Зачем нам нужно несколько подключений? одно единственное соединение может использоваться везде rit; поскольку объекты операторов всегда разные? Когда нам требуется множественное подключение в приложении?