Spring集成和事务管理 - 需要多大的难度?

时间:2014-08-14 14:29:14

标签: java spring transactions spring-integration

使用Spring集成我正在尝试构建一个简单的消息生成组件。基本上是这样的:

<jdbc:inbound-channel-adapter 
  channel="from.database"
  data-source="dataSource" 
  query="SELECT * FROM my_table"
  update="DELETE FROM my_table WHERE id IN (:id)"
  row-mapper="someRowMapper">
  <int:poller fixed-rate="5000">
      <int:transactional/>
  </int:poller>
</jdbc:inbound-channel-adapter>

<int:splitter
  id="messageProducer"
  input-channel="from.database"
  output-channel="to.mq" />

<jms:outbound-channel-adapter
  channel="to.mq"
  destination="myMqQueue"
  connection-factory="jmsConnectionFactory"
  extract-payload="true" />

<beans:bean id="myMqQueue" class="com.ibm.mq.jms.MQQueue">
  <!-- properties omitted --!>
</beans:bean>

“messageProducer”每次轮询可能会生成几条消息,但不一定每行一条消息。

我担心的是我想确保不会从my_table删除行,除非生成的消息已提交到MQ通道。

另一方面,我会接受在数据库或网络故障情况下的行不会被删除,从而导致产生重复的消息。换句话说,我将解决非XA单阶段提交可能重复的问题。

当试图弄清楚我需要为Spring配置提供什么时,我很快就会遇到关于事务管理器,AOP和交易建议链的无休止讨论,我觉得这很难理解 - 我知道我应该这样做。

但是我担心我会花很多时间来制作一个对我手头的问题不太重要的配置。

所以 - 我的问题是:可以这么简单 - 还是我需要为事务同步提供显式配置?

1 个答案:

答案 0 :(得分:1)

  

但我可以用jdbc / jms混合做类似的事情吗?

我会说“是”。

请阅读Dave Syer关于ChainedTransactionManager来自{{1}}的文章。