Jooq 不使用春季交易
Posted
技术标签:
【中文标题】Jooq 不使用春季交易【英文标题】:Jooq not working with spring transactions 【发布时间】: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
(如果不存在则创建一个新事务),我看不到任何回滚并且事务不起作用。在这种情况下,我没有得到任何异常。
【参考方案1】:
好的,我遇到了问题,应该回滚事务的异常发生在事务范围之外。如果我在包含异常的范围内添加了@Transactional
,则回滚工作正常。
此外,propagation
应为 Propagation.MANDATORY
应更改为 Propagation.REQUIRED
(这是默认值)。
【讨论】:
以上是关于Jooq 不使用春季交易的主要内容,如果未能解决你的问题,请参考以下文章