Я работаю над проектом, на котором базируются веб-службы на основе Spring и Spring Jdbc. Я настроил DataSourceTransactionManager для управления транзакциями и применил его к уровню обслуживания с помощью Pointcut. ТРЕБУЕТСЯ уровень распространения транзакций.Как обрабатывать параллелизм транзакций декларативно?
Запросы выдаются с использованием пружины JdbcTemplate.
Проблема в том, что в случае множественного одновременного запроса к службе я получаю MySQLTransactionRollbackException («Тупик обнаружен при попытке получить блокировку, попробуйте перезапустить транзакцию»).
По всей видимости, одна из транзакций получила блокировку, которая заставляет вторую потерпеть неудачу.
Мой вопрос: как настроить Spring на задержку выполнения службы до тех пор, пока не будет доступна блокировка, вместо того, чтобы просто отказаться и выбросить исключение?
Я не могу даже поймать исключение и попытаюсь выполнить повторный запрос, потому что я применил транзакцию на уровне сервиса как совет, который помог моим DAO чистым.
Я надеюсь получить только декларативное решение (поскольку я фанатик AOP & crusader против шаблона кода :-)). Но даже программные решения приветствуются.
Спасибо за ваши предложения.
Update -
@ninjalj Да это было на самом деле реальный тупик. Оказывается, я неправильно писал свой тест. Глупый меня :-(