Связывает ли менеджер транзакций Spring соединение с потоком? - PullRequest
8 голосов
/ 14 февраля 2012

Я нашел следующую ветку: Как именно JdbcTemplate с TransactionManager работает вместе?

Первое предложение этого:

Насколько я понял DataSourceTransactionManagerсвязывает JDBC-соединение из указанного источника данных с текущим потоком, обеспечивая одно привязанное к потоку соединение для каждого источника данных.Если это пул соединений, он займет одно из доступных соединений.

... это именно то, что я хочу знать.

При использовании диспетчера транзакцийв конечном итоге каждый поток имеет свое собственное соединение?Кроме того, как долго эта связь живет?Использует ли один и тот же поток одно и то же соединение в течение одного запроса или происходит что-то еще?Я просто пытаюсь понять, что именно делает Spring, когда у вас есть менеджер транзакций, а когда нет (независимо от того, действительно ли у вас есть транзакция).

1 Ответ

12 голосов
/ 14 февраля 2012

При использовании диспетчера транзакций у вас в конечном итоге каждый поток имеет свое собственное отдельное соединение? Кроме того, как долго это соединение живет?

Соединение обычно получается из пула соединений. Соединение заимствуется из пула, когда менеджер транзакций запускает транзакцию, а затем возвращается в пул, когда транзакция завершается. В течение этого времени соединение связано с потоком.

Использует ли один и тот же поток одно и то же соединение в течение одного запроса

Используется одно и то же соединение на время транзакции. Сам запрос не имеет значения.

независимо от того, действительно ли у вас есть транзакция

У вас всегда есть транзакция, независимо от того, делаете вы это явно или нет. Если вы не настроите один явно, то драйвер JDBC и база данных будут запускать и завершать один столько времени, сколько потребуется для выполнения одной операции. Управление транзакциями Spring (или управление транзакциями любой другой платформы) позволяет вам продлить срок действия этой транзакции на несколько операций. Для этого требуется исключительное использование соединения на время транзакции.

...