Jooq没有使用spring交易

问题描述 投票:0回答:1

我尝试使用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'。我已经阅读了spring和jooq的文档,但我无法弄清楚缺少什么以及如何解决这个问题。有人可以指出我在这里失踪了什么。

java spring transactions spring-jdbc jooq
1个回答
1
投票

好的,我遇到的问题是应该回滚事务的异常发生在事务范围之外。如果我在包含异常的范围中添加了@Transactional,则回滚可以正常工作。 propagation应该是Propagation.MANDATORY应该更改为Propagation.REQUIRED(这是默认值)。

© www.soinside.com 2019 - 2024. All rights reserved.