【发布时间】:2020-04-27 12:29:03
【问题描述】:
使用JdbcOutboundGateway,我如何获得原始有效载荷的回复?
目前,响应负载为{UPDATED=1}。参考文档(Spring 5.2.x)和源代码似乎都没有提供替代方案。
我应该扩展类并覆盖handleRequestMessage 以返回原始有效负载吗?方法是protected,它对我来说是对extend 的邀请,或者在Spring Integration 中有一个首选的“模式”来处理下一个@ServiceActivator 中的{UPDATED=1},并以某种方式恢复有效负载。
如果有人好心回答,请举一个使用配置/注释而不是 XML 或 DSL 的示例。
编辑
我最终做了类似下面的事情。这样做是否可取?我是否因为不使用“integration-jdbc”方法而遗漏了什么?
@Bean
@ServiceActivator(inputChannel="myIn", outputChannel="myOut")
public GenericHandler<String> saveToDb(@Autowired MyRepository myRepo) {
return (payload, header) -> {
MyClass x = (MyClass) headers.get("MyClassObject")
myRepo.save(x);
return payload;
};
}
【问题讨论】:
-
任何不相关的 cmets 为什么不是 XML 或 DSL?
-
@Artem 主要是从可读性和可能无知的角度来看。我从第 5 版开始使用 Spring,并被教导使用注释。我被告知 XML 是“旧式”。然后我开始使用Integration,它的文档主要是面向XML 的。我认为这只是向下 Spring 4 的宿醉/向后兼容性。所以我想让我的代码尽可能地像“Java”一样。至于 DSL,一旦你进入大流程,它就会变得非常不可读。 .
-
这是不正确的假设:XML 配置仍然受支持,甚至可以与注释配置结合使用。但是,是的,我同意:如果一切都是 Java 和注释,最好不要用 XML 来打扰自己。那么,另一边的 Java DSL 有什么问题呢?
-
@Artem 在阅读 XML 配置时是否可以遵循一种模式?如果我查看 XML 配置;对我未经训练的眼睛来说,似乎与带注释的版本没有关联。以这个 JdbcOutboundGateway 为例。我以为是
@Gateway,但我看到你的一个要点,它使用了@ServiceActivator! -
@ArtemBilan 将我的代码重写为 DSL,我现在是 DSL 转换者 :-) 我需要更少的
@Beans来完成这项工作,因为我可以组合许多动作。我不必考虑需要哪个注释(例如@ServiceActivator@Transformer等)。 IDE 中的自动完成功能使编程更加直观。 (感谢您的出色工作和@GaryRussell)
标签: java spring spring-boot spring-integration spring-integration-jdbc