事务不工作的spring jooq

事务不工作的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

在将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(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)<代码>