我有一个事务轮询器(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。