Мы используем комбинацию Spring boot / MySQL / mybatis для нашего нового проекта.
mybatis-spring для управления транзакциями.
Используемый нами движок MySQL - innoDB. Мы впервые используем БД MySQL для микросервиса.
Проблема, с которой мы сталкиваемся, заключается в том, что транзакции не откатываются на БД, даже если в журналах трассировки весенней транзакции указано, что они есть.
Бревно
TRACE TransactionInterceptor: 545 - Завершение транзакции для [service.EntityActionServiceImplementation.updateApplicationStatus] после исключения: business.exception.BusinessException: / by zero
2018-11-14 16:22:32 TRACE RuleBasedTransactionAttribute: 134 - Применение правил для определения того, должна ли транзакция откатываться на business.exception.BusinessException: / на ноль
2018-11-14 16:22:32 TRACE RuleBasedTransactionAttribute: 151 - Победившее правило отката: RollbackRuleAttribute с шаблоном [business.exception.BusinessException]
2018-11-14 16:22:32 TRACE TransactionSynchronizationManager: 248 - Удалено значение [org.mybatis.spring.SqlSessionHolder@6a1568d6] для ключа [org.apache.ibatis.session.defaults.DefaultSqlSessionFactory@3db65c0d] из потока [main]
2018-11-14 16:22:32 TRACE TransactionSynchronizationManager: 142 - Полученное значение [org.springframework.jdbc.datasource.ConnectionHolder@73bb573d] для ключа [org.apache.commons.dbcp.BasicDataSource@76cdafa3] привязано к потоку [main ]
2018-11-14 16:22:32 TRACE TransactionSynchronizationManager: 248 - Удалено значение [org.springframework.jdbc.datasource.ConnectionHolder@73bb573d] для ключа [org.apache.commons.dbcp.BasicDataSource@76cdafa3] из потока [main]
2018-11-14 16:22:32 DEBUG DataSourceUtils: 340 - Возврат соединения JDBC с источником данных
2018-11-14 16:22:32 DEBUG DataSourceTransactionManager: 836 - Инициирование отката транзакции
2018-11-14 16:22:32 DEBUG DataSourceTransactionManager: 341 - Откат транзакции JDBC для соединения [HikariProxyConnection @ 16957838 wrapping oracle.jdbc.driver.T4CConnection@11c78080]
2018-11-14 16:22:32 TRACE TransactionSynchronizationManager: 336 - Очистка синхронизации транзакций
Блок кода
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = BusinessException.class)
public boolean updateApplicationStatus(){
try{
}catch(Exception ex){
throw new BusinessException(ex.getMessage(), ex.getCause());
}
}
Поведение изменится, если для источника данных установить автоматическую фиксацию false. в этом случае транзакция вообще не фиксируется.
BusinessException расширяет RunTimeException.
Схемы и движки таблиц - InnoDB.
Мы пропускаем какие-либо специфичные для MySQL настройки?