Я могу создать один DSLContext, который я могу повторно использовать в своем приложении во многих потоках?
Да, вы можете, при условии, что после инициализации вы не измените свой Configuration
и его компонентов, например, Settings
.
Есть ли какие-либо негативные последствия для этого, если я не изменяю конфигурацию? Contention et c?
Au contraire, это рекомендуемый способ использования DSLContext
. Используя его, вы получите выгоду от кэширования, например, для рефлексии, если вы используете Result.into(MyDto.class)
методы и т. Д. c.
Каждый раз, когда я делаю доступ к базе данных, получает ли Jooq соединение из пула делать доступ к БД, а затем фиксировать и освобождать его?
Да, вот как это работает, если ваш DataSource
поддерживается пулом. Конечно, пул может предоставлять jOOQ одно и то же соединение каждый раз, в зависимости от транзакционных контекстов, которые управляются вне jOOQ. jOOQ не волнует.
При использовании API транзакций, подобного этому: [...] Соединение будет получено из пула и повторно использовано для всех обращений с использованием контекста транс?
Метод transaction()
получает соединение и сохраняет его в течение TransactionalRunnable
, которое вы ему передаете (т.е. лямбда). Ваш вложенный экземпляр DSLContext trans
теперь будет работать с «кэшированным» Connection
и не сможет получать новые соединения от вашего DataSource
.
.