Весна.Управление транзакциями в БД с помощью весенней (спящей) транзакции - PullRequest
2 голосов
/ 05 января 2012

Можете ли вы исправить меня, как это работает?Метод помечен аннотацией транзакции.Открыта ли транзакция БД и зафиксирована ли она с помощью весенней транзакции при ее перехвате.Также все связанные ресурсы в БД остаются заблокированными, пока такой метод не завершен.Например, в транзакционном методе я получил несколько объектов из БД, затем несколько раз обновил или удалил некоторые из них.Это все происходит весной транзакции и транзакции БД происходит только в конце транзакционного метода с необходимыми блокировками ???Что если метод зависнет, например, в тупик, заблокированные ресурсы останутся заблокированными для других в БД?Как я вижу, да ..

DB (postgresql) state:

30179 | username  | 00:23:05.688157 | IDLE in transaction
6739  | username  | 00:23:13.02717  | IDLE in transaction                
6748  | username  | 00:23:15.266922 | IDLE in transaction
25595 | username  | 00:23:22.382349 | IDLE in transaction
25595 | username  | 00:23:22.382349 | IDLE in transaction 

Все они держали замки (23, 21, 20, 5, 6).Как это могло случиться?У меня не длинные операции.Только тупики: D Но этого не должно быть !!Так как я вижу, что некоторые транзакционные методы зависают, но ресурсы остаются заблокированными, это вызывает остановку других или следующих транзакций, ожидание заблокированных ресурсов и вся система в какой-то момент перестает работать ...

1 Ответ

1 голос
/ 05 января 2012

То, что все не имеет ничего общего с пружиной, это «нормальные» транзакции.

Что именно означает транзакция, сильно зависит от уровня изоляции транзакций , который вы используете.

Если «вы» вводите метод, аннотированный @Transactional, транзакция на уровне БД запускается (или, по крайней мере, если выполняется следующий оператор sql).Транзакция фиксируется, когда вы покидаете этот метод.

У аннотации @Transactional есть параметр для управления тем, что должно быть сделано, если для текущего потока уже есть транзакция .

...