Java Spring - Mybatis - Mysql Транзакция не работает - PullRequest
0 голосов
/ 14 ноября 2018

Мы используем комбинацию 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 настройки?

1 Ответ

0 голосов
/ 15 ноября 2018

Я использовал несколько менеджеров транзакций для нескольких баз данных. Добавленный идентификатор менеджера транзакций в аннотации решил проблему.

...