在spring integration (Java DSL)中,如何定义一个完整流程的事务?
通过Spring集成,我们可以定义一个示例流程:
@Bean
public IntegrationFlow myMessageFromMessageAmqpInboundFlow() {
return IntegrationFlows.from(myInboundChannel)
.transform(aMessageTransformer)
.transform(anotherMessageTransformer)
.channel(anOutputChannel)
.get();
}
我需要一个跨度整个流程的交易。目前,当我使用“aMessage转换器”访问数据库时,事务将在处理完此消息转换器后关闭。但是我需要一个在处理“另一个消息转换器”时仍未提交的事务?
我希望只需添加一个“@Transactional”(或@Transaction(propagation=propagation.REQUIRED,readOnly=true))
@Bean
@Transactional
public IntegrationFlow myMessageFromMessageAmqpInboundFlow() {
return IntegrationFlows.from(myInboundChannel)
.transform(aMessageTransformer)
.transform(anotherMessageTransformer)
.channel(anOutputChannel)
.get();
}
但这会导致“另一个消息转换器”中的“无会话异常”
您需要遵循以下文档,因此将其添加到您的流中:
.transform(aMessageTransformer, e -> e.transactional(true))
. transactional()
的位置:
/**
* Specify a {@link TransactionInterceptor} {@link Advice} with default
* {@code PlatformTransactionManager} and {@link DefaultTransactionAttribute} for the
* {@link MessageHandler}.
* @param handleMessageAdvice the flag to indicate the target {@link Advice} type:
* {@code false} - regular {@link TransactionInterceptor}; {@code true} -
* {@link org.springframework.integration.transaction.TransactionHandleMessageAdvice}
* extension.
* @return the spec.
*/
public S transactional(boolean handleMessageAdvice) {
< code > TransactionHandleMessageAdvice 表示:
* When this {@link Advice} is used from the {@code request-handler-advice-chain}, it is applied
* to the {@link MessageHandler#handleMessage}
* (not to the
* {@link org.springframework.integration.handler.AbstractReplyProducingMessageHandler.RequestHandler#handleRequestMessage}),
* therefore the entire downstream process is wrapped to the transaction.
如何使用java dsl Integrationflows从spring集成触发spring批处理作业。 我有下面的代码,它轮询目录中的文件,当新文件添加到目录中时,会生成一条消息,我想在该实例中触发一个Spring批处理作业。请建议。
问题内容: 我具有以下Spring Integration配置,该配置允许我从MVC Controller调用网关方法并让控制器返回,而集成流将在不阻塞控制器的单独线程中继续进行。 但是,我无法弄清楚如何使我的错误处理程序为该异步流工作。我的网关定义了错误通道,但是由于某种原因我的异常没有到达。相反,我看到被调用了。 网关: 为了查看我的错误处理程序正在处理的异步集成流程中发生的异常,我该怎么办?
我正在使用jhipster,我想在我的WebApp中集成spring批处理管理控制台。(例如http://localhost:8080/batch-console) 我尝试在我的jhipster webapp中集成以下响应,有没有一种方法可以正确地集成spring-batch-admin和spring-boot?但我得到以下错误(属性似乎未加载) Spring Boot版本:1.4.1.发布Jhi
我一直在研究Spring集成文件支持,在这里我需要将文件从输入目录移动到输出目录。成功地将其移动到输出目录后,应该将其归档,然后从输入目录中删除。我正在使用下面的配置来实现这一点。 请纠正我,如果我的配置可以更好的方式。 Spring集成配置: 我在服务激活器中有代码,如果归档目录不可用,它应该终止应用程序。因此,在运行应用程序时,在第一次移动文件后,我已经删除了归档目录。然后,我将新文件放置在i
当msg处理抛出异常时,如何有效地支持JMS重新交付? 我有一个使用JMS(ActiveMQ)的流,它具有配置为允许n次重新传递尝试的连接工厂。 我希望在处理msg时出现任何错误,导致msg在connectionFactory配置允许的情况下被放回重新交付,然后在最大重新交付尝试用尽时,交付给DLQ。与AMQ保持一致。 对一个相关SO问题的回答意味着我可能会有一个重新抛出的错误通道,它应该触发重新
我试图理解在Spring集成中聚合时返回的类型,这相当困难。我正在使用Project Reactor,我的代码片段是: 除了理解示例中传递的类型之外,我还想知道如何才能知道中流动的对象及其类型。