我有一个事务轮询器(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日志记录,但无法找到可疑的日志消息,最后我得到了它的工作。我声明了一个单独的dataSource(与普通数据库相同的配置)和transactionManager org.springframework.jdbc.datasource.DataSourceTransactionManager而不是我的普通org.springframework.orm.jpa.JpaTransactionManager。