Java Spring集成-在拆分器输出通道上配置事务超时

Java Spring集成-在拆分器输出通道上配置事务超时,java,spring,spring-integration,Java,Spring,Spring Integration,我有一个拆分器,输出到taskexecutor支持的通道。其思想是并行处理所有这些消息。最近,我们开始看到其中一些消息的Txn超时。以最小的更改增加Txn超时的最佳方法是什么?下面是相关的配置代码 .... .... <channel id="splitterOutputChannel"> <dispatcher task-executor="eventProcessingExecutor" failover="false" /> </channel>

我有一个拆分器,输出到taskexecutor支持的通道。其思想是并行处理所有这些消息。最近,我们开始看到其中一些消息的Txn超时。以最小的更改增加Txn超时的最佳方法是什么?下面是相关的配置代码

....
....
<channel id="splitterOutputChannel">
    <dispatcher task-executor="eventProcessingExecutor" failover="false" />
</channel>

<splitter id="listSplitter" input-channel="splitterInputChannel" output-channel="splitterOutputChannel" />

<service-activator ref="referenceBean" method="setFileId" input-channel="splitterOutputChannel"
    output-channel="eventProcessingInputChannel" />

<chain input-channel="eventProcessingInputChannel" output-channel="enricherOutputRouterChannel">
    <header-enricher error-channel="errorHandlingChannel" />
    <service-activator ref="messageEnricherBean" method="getPayloadFromDatabase" />
</chain>
....
....
在setFileId方法上设置Txn超时是否可行? 目前,它没有事务配置,spring采用默认weblogic 30秒超时

@Transactional(timeout=60)
public Message<?> setFileId(Message<?> message) {
    ...
    return myMessage;
}

您需要显示堆栈跟踪。我假设您已经意识到,一旦最后一次拆分在TE中排队,任务执行器上的异步切换就会终止事务。该渠道的下游不会参与交易。是的,我知道Txn的边界。2.我无法粘贴完整的堆栈跟踪,但在拆分之后,我们有一些繁重的工作要做。这包括数据库更新、几个WS调用、MQ交互等等。超时发生在一次DB读取期间,这发生在流的早期。严重:登记XAConnection时出现意外异常java.sql.SQLException:事务回滚:事务在XXXIngTransactionDAOImpl处1-752F7C307AA4B2010ED 30秒后超时。getXXXINGLogByTxnIdXXX.java:60getXXXINGLogByTxnId方法具有@Transactional属性,但我不想触摸/更改它作为一个常用方法。所以问题是,如果我在setFileId操作的早期将@Transactional注释放在流中,超时时间为60秒,那么这个位置正确吗?如果是,我认为在拆分器之后,我在任何地方使用DirectChannel的线程上下文中的所有事务更新/调用都应该遵守原始超时。否。这就是我需要堆栈跟踪的原因。设置字段退出时,tx将提交。您需要将整个下游流程包装在一个tx中。一种方法是在eventProcessingInputChannel中使用事务建议发送。谢谢Gary,现在您说我意识到为什么我的解决方案不起作用了。不知道我在想什么写我写的东西。让我来研究一下建议配置,并在这里尽快回复。再次感谢。