我的系统图已附上。
流程如何工作:
spring integration flow从C:\上的json文件读取输入并执行2个操作:
存储到数据库
通知/打印给用户
重要标准:
我希望商店进入数据库流程独立于业务逻辑(打印到/通知用户),即数据库exception/DB
的成功不应影响通知用户。
同样,通知用户不应该影响数据库流。
我浏览并发现我必须使用执行程序渠道将商店委托给DB'到另一个线程。
我无法找到执行通道的代码示例。 我只需要基于注释的代码,因为所有其他类都是基于注释的 。
我需要什么:ExecutorChannel的代码示例 - 基于注释。
2中的代码(从文件中读取json并将其发送到DB,自定义业务逻辑)
@Bean
public IntegrationFlow readFromJSONFile() {
return IntegrationFlows
.from("/path/to/File")
.transform("Transformer to convert to Bean")
.wireTap(
flow -> flow.handle(msg -> logger
.info("Message sent to common channel: " + msg.getPayload())))
.channel("Common Channel Name")
.get();
}
4里面的代码:
@Bean
public IntegrationFlow sendToDb() {
return IntegrationFlows
.from("Common Channel Name")
.handle("DAO Impl to store into DB") // I THINK THE MESSAGE SHOULD BE SENT TO AN EXECUTOR CHANNEL TO PROCESS ON A SEPARATE THREAD
.get();
}
5中的代码:
@Bean
public IntegrationFlow sendToBusinessLogictoNotifyUser() {
return IntegrationFlows
.from("Common Channel Name")
.handle("Business Logic Class name")
.get();
}
当前行为:如果存在数据库异常,则通知用户也会失败。相反,我希望它能够安静地记录下来。
注意:我只需要注释示例。
答案 0 :(得分:1)
您真的不需要ExecutorChannel
- 只需在发布/订阅频道设置ignoreFailures
到true
即可...
/**
* Specify whether failures for one or more of the handlers should be
* ignored. By default this is <code>false</code> meaning that an Exception
* will be thrown whenever a handler fails. To override this and suppress
* Exceptions, set the value to <code>true</code>.
* @param ignoreFailures true if failures should be ignored.
*/
public void setIgnoreFailures(boolean ignoreFailures) {
如果要在数据库存储上记录或以其他方式处理异常,可以向执行数据库存储的组件添加ExpressionEvaluatingRequesthandlerAdvice
。
如果您真的需要ExecutorChannel
,DSL section of the reference manual has an example。
.channel(MessageChannels.executor("executorChannel", this.taskExecutor))