java - Spring Integration 和 Transaction Management——需要多难?

标签 java spring transactions spring-integration

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

<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 channel 。

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

当试图弄清楚我需要在我的 Spring 配置中添加什么时,我很快就迷失在无休止的关于事务管理器、AOP 和事务建议链的讨论中,我发现这些我很难理解——尽管我知道我应该这样做。

但我担心我会花很多时间准备一个对我手头的问题来说并不是真正必要的配置。

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

最佳答案

But can I do something similar with a jdbc/jms mix?

我会说"is"。

请阅读 Dave Syer 关于 Best effort 1PC 的文章,ChainedTransactionManager 的来源。

关于java - Spring Integration 和 Transaction Management——需要多难?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25310632/

相关文章:

c# - SQL 服务器,C# : Timeout exception on Transaction Rollback

mysql - @Transactional 不执行提交

Java - Selenium WebElement isDisplayed() 方法不可用

java - 服务器端 EOFException

java - CAS 4.2.x 部署器ConfigContext.xml 连接到 LDAP

java - 在 rest Controller 中的单个端点上组合文件上传和请求正文

powershell - Azure Powershell 命令中的事务

java - "no X11 display variable was set, but this program performs an operation which requires it"错误是什么意思以及如何/可以修复它?

java - 我们如何处理异步 Web 服务调用的异常?

java - 无法在 Spring Boot 中为每个测试方法初始化数据库