事务不工作的spring jooq
在将spring与jooq集成时,事务性声明回滚函数不起作用。下面是我在application-context.xml中的设置事务不工作的spring jooq,spring,spring-transactions,jooq,Spring,Spring Transactions,Jooq,在将spring与jooq集成时,事务性声明回滚函数不起作用。下面是我在application-context.xml中的设置 <bean id="transactionManager1" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <qualifier value="tx-jooqtest"/> <property name="dataSour
<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(connProvider, SQLDialect.MYSQL);
String sql = "insert into food (kind) values ( ? )";
dslContext.execute(sql ,new Object[]{"Its a whole next level kind "}
);
insert2();}
在insert2()方法中,我抛出了DataAccessExcpetion,但事务并没有回滚。在应用程序上下文xml中是否还有其他属性需要设置才能使其正常工作 application-context.xml中似乎缺少一些属性。为了让jooq认识到spring事务与jooq是同一事务的一部分,我们必须创建一个连接提供程序bean,该bean通过TransactionWaredatasourceProxy引用数据源。更新的代码和配置如下
<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(connProvider, SQLDialect.MYSQL);
String sql = "insert into food (kind) values ( ? )";
dslContext.execute(sql ,new Object[]{"Its a whole next level kind "}
);
insert2();}
platform-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>
<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>
为了记录在案,我想为了有人能够回答这个问题(无论是在堆栈溢出还是在jOOQ手册上),您需要添加代码:insert2()
,您的VLDataSource
。我仍然相信您的问题存在于VLDataSource
中,但很难从您提供的信息中判断。它似乎缺少一些配置。我必须在application-context.xml中使用DSL.using(connProvider,dialogue)和below属性,而不是DSL.using(dataSource,dialogue)<代码>