Хобрук: Ваш путь к мастерству в программировании

Несколько запросов Luminus в одном и том же соединении с базой данных

В моем приложении Luminus у меня есть это:

(defn page1 [id]
  (layout/render "page1.html" 
    {:article (db/get-single-article {:id (Integer/parseInt id)}))

Я хочу выполнить несколько разных запросов к базе данных в рамках одного и того же соединения с базой данных. Как я могу это сделать?


  • Вы хотите использовать одно и то же соединение с базой данных или транзакцию с базой данных? 24.05.2016
  • @PiotrekBzdyl, подключение. 24.05.2016

Ответы:


1

Из вашего вопроса неясно, хотите ли вы повторно использовать одно и то же соединение с БД для обработки нескольких HTTP-запросов или одного HTTP-запроса, вызывающего несколько функций с использованием JDBC API (поэтому все эти вызовы JDBC используют одно и то же соединение с БД).

Если это последний случай, вы можете использовать with-db-connection для переноса всех ваших функций, вызывающих JDBC API. Вы также можете использовать with-db-transaction, если все SQL операции должны быть частью одной транзакции БД.

В первом случае я не уверен, зачем вам нужно повторно использовать одно и то же соединение для нескольких HTTP-запросов, но это не распространенная идиома, поскольку HTTP по определению не имеет состояния и вызывает множество проблем.

Вы можете сохранить это соединение в своем кольцевом HTTP-сеансе, чтобы иметь возможность получать его в любое время. получить запрос, связанный с сеансом, и использовать его для логики JDBC.

Однако такое решение имеет следующие недостатки:

  • вы должны убедиться, что соединение освобождается в пул (или закрывается, если вы не используете пул), когда оно больше не нужно. Как бы вы это обнаружили? Что, если клиент выйдет из строя и никогда не завершит какой-то рабочий процесс, в котором вы решите очистить соединение с БД?
  • сколько одновременных «сеансов» вам нужно обрабатывать? Если многие (например, сотни), поддерживающие выделенное соединение для каждого сеанса, не будут масштабироваться (соединения с БД являются дорогостоящими ресурсами с обеих сторон: клиент и серверы)
24.05.2016
Новые материалы

Учебные заметки JavaScript Object Oriented Labs
Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

Разбор строк запроса в vue.js
Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
«Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..