方案是入站jms适配器 - >服务激活器(数据库搜索,业务逻辑,插入或更新)
<int-jms:message-driven-channel-adapter id="swiftAdapterInput" channel="mt950"
connection-factory="connectionFactory" destination-name="${integration.swift.jms.queue.from}" pub-sub-domain="false"
auto-startup="false" error-channel="errorChannel" transaction-manager="transactionManager" acknowledge="transacted" />
<int:service-activator input-channel="errorChannel" ref="errorHandler" />
<bean id="errorHandler" class="nest.integration.utils.error.ErrorHandler" />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
当我的servcie激活器抛出异常时,我的errorHandler工作正常,但异常是在结束时(提交后),例如db unique constrat异常,消息不会转到错误通道,而只是回滚到jms队列。
但在这种情况下我需要我的errorHander,因为我需要发送电子邮件异常等。
坦克提前 祝愿Tamas
答案 0 :(得分:0)
我认为你的问题是你必须在你的errorHandler
中反对TX,但不要提交。
这就是你从egyediségre vonatkozó megszorítás nem tel
获得DefaultMessageListenerContainer
的原因,因为在提交时会导致数据库错误。
见这里:Exceptions in Spring Integration: How to log but not intercept