【发布时间】:2017-09-21 03:01:57
【问题描述】:
将 spring 与 jooq 集成时,事务性声明性回滚功能不起作用。我在 application-context.xml 中的设置如下
<bean id="transactionManager1" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<qualifier value="tx-jooqtest"/>
<property name="dataSource" value="#{jooqtest.getDataSource()}"/>
</bean>
<bean id="jooqtest" class="com.vassarlabs.datasource.service.impl.VLDataSource">
<property name="dataStoreName" value="jooqtest" />
</bean>
然后我有一个带有事务标记的方法,如下所示
@Transactional(value = "tx-jooqtest" , rollbackFor = DataAccessException.class)
public void testTransaction() {
DSLContext dslContext = null;
dslContext = DSL.using(dtSource.getDataSource(), SQLDialect.MYSQL);
String sql = "insert into food (kind) values ( ? )";
dslContext.execute(sql ,new Object[]{"Its a whole next level kind "} );
insert2();}
在 insert2() 方法中我抛出 DataAccessExcpetion ,但事务没有回滚。我是否必须在 application-context xml 中设置任何其他属性才能使其工作。
【问题讨论】:
-
为了记录,这个问题也被问到jOOQ manual
-
我认为为了让某人能够回答这个问题(无论是在 Stack Overflow 上还是在 jOOQ 手册上),您需要添加以下代码:
insert2(),您的VLDataSource.我仍然认为您的问题在VLDataSource之内,但是从您到目前为止提供的信息中很难判断。 -
似乎缺少一些配置。而不是 DSL.using(dataSource , dialect) ,我必须在 application-context.xml 中使用 DSL.using(connProvider , dialect) 和以下属性。
<bean id="transactionAwareDataSource" class="org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy"> <constructor-arg value="#{jooqtest.getDataSource()}" /> </bean> <bean class="org.jooq.impl.DataSourceConnectionProvider" name="connectionProvider"> <constructor-arg ref="transactionAwareDataSource" /> </bean>
标签: spring spring-transactions jooq