0

我有一个事务轮询器(spring 3.1.2 和 spring-integration 2.2.3)来确保如果事务被异常回滚,消息将被重新传递

    <int:outbound-channel-adapter id="obca" ref="notificationHandler" 
        method="handle" channel="notificationChannel" >
        <int:poller max-messages-per-poll="100" fixed-delay="6000"
            time-unit="MILLISECONDS">
            <int:transactional isolation="DEFAULT" />
        </int:poller>   
    </int:outbound-channel-adapter>

这在使用 H2 数据库进行单元测试时工作正常,只要方法抛出异常,消息就会重新传递

   @Transactional
   public void handle(Message<MyPayload> message)

但是当我使用我们在生产中使用的 sql-server(ms-sqlserver,如果这很重要,它使用 READ COMMITTED SNAPSHOT 作为隔离级别)时,异常的重新传递不起作用。任何提示为什么会这样?

编辑:

我测试了 TRACE 日志,但找不到可疑的日志消息,最后我让它工作了。我声明了一个单独的数据源(与普通数据库相同的配置)和 transactionManager org.springframework.jdbc.datasource.DataSourceTransactionManager 而不是我正常的 org.springframework.orm.jpa.JpaTransactionManager。

4

0 回答 0