我有以下2个组件,它们应该首先从Mongo中删除文档,然后从Elastic中删除。
主要流程:
@Component
public class DeleteDocumentFlow {
@Autowired
private StoreInMongoFlow storeInMongoFlow;
@Bean
public IntegrationFlow deleteDocument() {
return IntegrationFlows.from(Channels.METADATA_DELETE_STATUS.name())
.handle(storeInMongoFlow.deleteDocumentInMongo())
.channel("deleteDocumentInES.input")
.get();
}
}
服务:
@Component
public class StoreInMongoFlow {
@Bean
public IntegrationFlow deleteDocumentInMongo() {
return flow -> flow.
<Metadata>handle((p, h) -> {
DBObject obj = BasicDBObjectBuilder.start("i", p.getId()).get();
DeleteResult documentEntry = this.mongoTemplate.remove(obj, "docs");
return documentEntry.getDeletedCount();
})
.log(LoggingHandler.Level.INFO, m -> "Number of documents deleted: " + m.getPayload());
}
}
不幸的是,deleteDocumentInMongo从未被调用。我可以在日志中看到bean已正确注册。
我是做错了什么,还是你需要更多的调试信息?如果我窃听手柄,则deleteDocumentInES。执行输入,但忽略mongo流。
你肯定做了一些根本错误的事情。您试图将一个集成流(IntegrationFlow)视为一个服务,从句柄()调用。这不是设计集成流的目的。有关更多信息,请参阅文档:https://docs.spring.io/spring-integration/docs/current/reference/html/dsl.html#java-数字用户线
DSL提供了一个IntegrationFlow组件来定义通道和它们之间endpoint的组合,但现在IntegrationFlow只起配置作用,在应用程序上下文中填充真正的bean,并且在运行时不使用。
如果您将逻辑声明为单独的IntegrationFlow
,则无需担心句柄()
-只需使用通道("deleteDocumentInMongo.input")
将消息从主流点发送到该MongoDB子流的第一个通道。
如果你想用Elastic做同样的操作,你应该考虑用一个PublishSubscribeChannel来发送一条消息和从这个通道开始的两个流。
由于您用log()结束了deleteDocumentInMongo流,因此您无法得到任何回复和您的。无法访问频道(“deleteDocumentInES.input”)
。
请阅读更多文档,了解什么是发布订阅、请求回复、服务激活器和流本身。
我使用Spring boot 1.5.7 我还没有配置CommonMultipartResolver,因为Spring Boot已经处理了文件上传。 如果我的上载超过允许的最大大小,则会抛出一个丑陋的异常。 这由我的控制器处理。 这种处理不仅复杂,而且很遗憾是特定于Tomcat的,因为SizeLimitExceededException位于包。 我如何处理这种错误情况,即无论使用哪个Servlet
我正在使用Spring WebFlux webclient进行REST调用。我将连接超时配置为毫秒,相应地: 方法将为每个/响应代码返回一个空的。如何对连接超时甚至读/写超时进行相同的操作。目前,它只是抛出一个,而不处理该异常
我试图捕获一个,其中包含XML规则中不允许使用的字符。(例如,” 我已经阅读了描述方法的Javadoc。但是,我没有看到它无法捕获ValidationEvent。 从指定的InputStream中解组XML数据并返回结果内容树。使用此形式的解组API时,验证事件位置信息可能不完整。 在最后一次尝试中,我尝试在网上搜索,但什么也找不到<任何帮助都将不胜感激:D 我很抱歉补充一个问题。(POJO类有点
如果其他人已经解决了这个问题,那就只是寻找一些信息。我想同时使用Spring集成和Spring批处理。这两个都是SpringBoot应用程序,理想情况下,我希望将它们和各自的配置分开,这样它们都是自己的可执行jar。我在自己的进程空间中执行它们时遇到问题,我相信我希望,除非有人能说服我,否则,每个程序都能像自己的Spring Boot应用程序一样运行,并用自己的配置文件和属性初始化自己。不过,我遇
动机:我需要在路由到Sftp出站网关之前设置委托SessionFactory的threadKey,然后取消设置threadKey。 根据租户的不同,我需要使用不同的Sftp用户帐户。在我的应用程序中,用户帐户是一个配置问题。yml,我不想为每个新租户写单独的路由。 设置threadKey需要
问题内容: 有谁知道如何获取由Spring Boot创建的Hibernate SessionFactory的句柄? 问题答案: 你可以使用以下方法完成此操作: 其中,entityManagerFactory是一个JPA 。