【发布时间】:2019-02-14 23:20:55
【问题描述】:
我尝试使用带有 Spring JDBC 的 Jooq 进行设置,除事务外一切正常。
这是我目前的设置:
@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 的文档,但我无法弄清楚缺少什么以及如何解决这个问题。有人可以指出我在这里缺少什么。
【问题讨论】:
-
@Transactional(propagation = Propagation.MANDATORY)表示必须有一个事务,否则它不会创建一个。 -
即使我使用
propagation = Propagation.REQUIRED(如果不存在则创建一个新事务),我看不到任何回滚并且事务不起作用。在这种情况下,我没有得到任何异常。
标签: java spring transactions spring-jdbc jooq