当前位置: 首页 > 知识库问答 >
问题:

如何在spring集成中找到事务结束点?

凌展
2023-03-14

好的,我添加了我的Spring xml配置以对我的情况进行更多解释。

首先,我聚合了7个通道;其次,聚合器释放声明为发布通道的聚合通道。第三,每7个订阅频道选择室内数据库制作每条消息。第四,每个通道使用jdbc出站通道适配器将数据插入外部数据库。

下面我附上了每个与xml配置相关的。。谢谢

<int:bridge input-channel="request-write-to-openPMSQueueChannel"
        output-channel="writetoOpenPMSChannel">
        <int:poller fixed-rate="5000" max-messages-per-poll="-1">
            <int:transactional propagation="REQUIRED"
                transaction-manager="transactionExternalDatabaseManager" />
        </int:poller>
    </int:bridge>
<int:chain input-channel="writetoOpenPMSChannel"
    output-channel="writetoOpenPMS007Channel">
    <int:service-activator method="exectue007">
        <bean id=""
            class="com.sds.redca.core.module.analyzer.convert.ModelingConvertSVC">
        </bean>
    </int:service-activator>
    <int:splitter ref="fromListToRowSplitter" />
</int:chain>

<int:chain input-channel="writetoOpenPMSChannel"
        output-channel="writetoOpenPMS006Channel">
        <int:service-activator method="exectue006">
            <bean id=""
                class="com.sds.redca.core.module.analyzer.convert.ModelingConvertSVC">
            </bean>
        </int:service-activator>
        <int:splitter ref="fromListToRowSplitter" />
    </int:chain>
<int-jdbc:outbound-channel-adapter channel="writetoOpenPMS001Channel" 
query="INSERT INTO IF_RSRC
       (PJT_ID, DT_INPUT, RSRC_ID, RSRC_TYPE_ID, RSRC_DETAILTYPE_ID, RSRC_NM, CNFG_PJT_NM, RSRC_PATH_NM, LST_RGSTR_ID, LST_RGST_DTM, FINAL_RVSN_NO, YN_USE)
       VALUES
       (:payload[PJT_ID], :headers[timeStamp], :payload[RSRC_ID], :payload[RSRC_TYPE_ID], :payload[RSRC_DETAILTYPE_ID], :payload[RSRC_NM], :payload[CNFG_PJT_NM],
       :payload[RSRC_PATH_NM], :payload[LST_RGSTR_ID], :payload[LST_RGST_DTM], :payload[FINAL_RVSN_NO], :payload[YN_USE])"
data-source="outboundDataSource" />
<int-jdbc:outbound-channel-adapter channel="writetoOpenPMS002Channel" 
query="INSERT INTO IF_RSRC_RELATION
       (PJT_ID, DT_INPUT, MAIN_RSRC_ID, SUB_RSRC_ID, RELATION_TYPE_CODE_ID)
       VALUES
       (:payload[PJT_ID], :headers[timeStamp], :payload[MAIN_RSRC_ID], :payload[SUB_RSRC_ID], :payload[RELATION_TYPE_CODE_ID])"
data-source="outboundDataSource" />

但问题是,我必须在7个插入作业成功完成后立即触发一些事件。如何获得7个插入事务完成的点,以触发某些post事件?

共有1个答案

傅琦
2023-03-14

抱歉,信息不够。我们需要查看上游配置。

如果您的所有插入都在同一个发送中,那么您可以在业务逻辑的一端再添加一个订户。

如果使用TX使用同一个线程完成所有操作,则在您不执行最终通知之前,TX不会完成。

从另一方面来说,如果所有这些项目都在不同的交易中,那么当每个项目向另一个表中添加一些信息以确认它已经完成了原始工作时,您需要类似于收据之类的东西。是的,它可以在同一个TX。

要确定所有所需的项目都完成了它们的工作,您需要以较短的间隔轮询,该新表具有特定的业务密钥来计数它们。

从另一端,您的所有任务都可以向公共<代码>

可能还有其他解决方案,但我们需要更多地了解您的用例。

更新

感谢您的配置。

我希望你的WritetoOpenPMSChannel是单线程发布订阅通道。

因此,您的所有WritetoOpenPMS*html" target="_blank">进程都绑定到该轮询器的TX,并将在该单个TX中一个接一个地完成。

因此,没有停止向该频道添加一个以上的订户作为最后一个订户。在发送结束时,也就是提交之前,它会收到相同的消息。如果这些表上没有任何延迟约束,那么在单个TX内,一切都将正常。

从另一侧<代码>

 类似资料:
  • 问题内容: 据我了解,事务开始于调用语句,然后终止于调用命令,如下例所示。 我理解正确吗?如果不能,请指正我,因为这实际上是我第一次在现实生活中使用交易。 谢谢。 问题答案: 好吧,根据php doc,您是对的。 在上面的示例中: 的是自动提交,因为它是默认的行为。 在 没有 自动致力于因。 将被自动提交,因为是 复位 通过。

  • 在spring integration (Java DSL)中,如何定义一个完整流程的事务? 通过Spring集成,我们可以定义一个示例流程: 我需要一个跨度整个流程的交易。目前,当我使用“aMessage转换器”访问数据库时,事务将在处理完此消息转换器后关闭。但是我需要一个在处理“另一个消息转换器”时仍未提交的事务? 我希望只需添加一个“@Transactional”(或@Transaction

  • 我目前在Spring集成中处理JMS事务时遇到困难。我正在创建的集成流程如下所示: JMS队列A- 我希望在JMS队列B和JMS队列C上保证消息的传递。然而,为了使传递稍微困难一些,我希望将导致错误的消息存储在单独的JMQ队列上,并在队列a上确认消息。 但是,如果我对此进行测试并在队列C上设置消息之前抛出错误(让我们假设队列B首先完成,队列C其次完成),事务将确认队列A并在队列B和错误队列上提交消

  • null 如何在transform()步骤中添加Jaxb2Marshaller?

  • 问题内容: 我正在加载模板,然后使用服务针对我的范围对其进行编译。 然后在弹出窗口中使用它 我的模板非常复杂,可能要花一些时间来编译。 在弹出窗口中使用angular之前,如何确保angular完成了模板的编译? 编辑 :在创建弹出窗口之前,我试图将角度强制为,它确实可以工作,但会生成JavaScript错误,这对我来说是不可接受的。 问题答案: 允许您使用所谓的克隆附加功能,该功能允许您将元素附