Jooq не работает с весенними транзакциями - PullRequest
0 голосов
/ 10 сентября 2018

Я попытался настроить использование Jooq с Spring JDBC, все работает правильно, кроме транзакций.

Это мои текущие настройки:

@Configuration
public class DALConfig {

    @Value("${jdbcUrl}")
    String jdbcUrl;

    @Value("${username}")
    String username;

    @Value("${password}")
    String password;

    @Bean(destroyMethod = "close")
    DataSource getDataSource() {
        BasicDataSource dataSource = new BasicDataSource();
        dataSource.setUrl(jdbcUrl);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        return dataSource;
    }

    @Bean(name="transactionManager")
    DataSourceTransactionManager getDataSourceTransactionManager() {
        return new DataSourceTransactionManager(getDataSource());
    }

    @Bean(name="transactionAwareDataSource")
    TransactionAwareDataSourceProxy getTransactionAwareDataSourceProxy() {
        return new TransactionAwareDataSourceProxy(getDataSource());
    }

    @Bean(name="connectionProvider")
    DataSourceConnectionProvider getDataSourceConnectionProvider() {
        return new DataSourceConnectionProvider(getTransactionAwareDataSourceProxy());
    }

    @Bean
    DefaultDSLContext getDefaultDSLContext() {
        return new DefaultDSLContext(getConfiguration());
    }

    @Bean
    DefaultConfiguration getConfiguration() {
        DefaultConfiguration config = new DefaultConfiguration();
        config.set(SQLDialect.MYSQL);
        config.setConnectionProvider(getDataSourceConnectionProvider());
        return config;
    }

    @Bean
    CourseDao getCourseDao() {
        return new CourseDao(getConfiguration());
    }
}

Я использую @Transactional(propagation = Propagation.MANDATORY) аннотацию для метода, который вставляет новый курс, но я получаю следующее исключение org.springframework.transaction.IllegalTransactionStateException: No existing transaction found for transaction marked with propagation 'mandatory'. Я прочитал документы для весны и jooq, но я не смог выяснить, чего не хватает и что нужно сделать, чтобы решить эту проблему. Может кто-нибудь указать, что я здесь упускаю.

1 Ответ

0 голосов
/ 10 сентября 2018

ОК, у меня возникла проблема, исключение, которое должно было откатить транзакцию, происходило за пределами транзакции. Если я добавлю @Transactional в область действия, которая включает исключение, откат будет работать правильно.
Также propagation должно быть Propagation.MANDATORY должно быть изменено на Propagation.REQUIRED (по умолчанию).

...