Попытка понять транзакции ... Я использую Spring JdbcTemplate
и @Transactional
аннотацию в методе. Хотя транзакция активна во время выполнения метода (как указано в обоих журналах и TransactionSynchronizationManager.isActualTransactionActive())
, автокоммит также, кажется, должен быть включен (как показано jdbcTemplate.getDataSource().getConnection().getAutoCommit())
).autocommit = true во время весенней транзакции
Я не понимаю две вещи
- Разве идея jdbc-транзакций не отключается автоматически и вручную завершается в конце кода? Неужели не работает менеджер весны, который должен делать что-то подобное под капотом?
- Если автокоммит действительно включен: если один модификация базы данных преуспевает, а последующая неудача, как может откат назад предыдущих изменений (что он делает, d несмотря на стоимость автокомментариев)?
Какие TransactionManager вы используете? Какой источник данных вы используете? Обратите внимание, что jdbcTemplate.getDataSource(). GetConnection() не вернет AFAIK, текущее соединение, а новое, которое не обрабатывается TransactionManager. Что происходит, когда вы вызываете getAutoCommit() на соединение, переданное обратным вызовам JdbcTemplate? –
SimpleDriverDataSource и DataSourceTransactionManager. –
Прочтите мой обновленный комментарий. –