数据库插入(如果不存在) - Spring集成

时间:2014-10-10 23:33:34

标签: spring spring-integration

我们有一个int-jms:消息驱动通道适配器 - >变压器 - >过滤器 - >另一个变压器 - > int-jdbc:outbound-channel-adapter(在table_1中插入) (考虑 - >作为渠道)

我想更改此流程以插入2个表而不是1但是对于table_2,我想仅在与消息中的某些字段对应的数据已经不存在于表中时插入,即如果不存在则插入。

我想到的一件事是,我现在需要一个带有ignore-failures = false的pub-sub-channel将流分成2个表。

我的问题是我应该使用哪个组件来选择数据来检查table_2中是否存在数据?我首先想到入站通道适配器是正确的选择,但无法弄清楚如何在两个组件之间滑动它,即说变压器和出站通道适配器。

我能想到的一些事情是: 1.使用过滤器,将其传递给jdbcTemplate,以便过滤器本身可以触发JDBC查询,以便在记录不存在时接受。 2.使用出站通道适配器,插入查询也应检查数据是否存在,例如insert-if。我不确定Oracle是否有这样的东西。我在研究。

请指出一个示例或文档或告诉我最好的方法。

由于

1 个答案:

答案 0 :(得分:1)

实际上你可以使用

<chain>
    <header-enricher>
        <header name="original" expression="payload"/>
    </header-enricher>
    <int-jdbc:outbound-gateway query="SELECT count(*) from TABLE where ..."/>
    <filter expression="payload == 0"/>
    <transformer expression="headers.original"/>
</chain>

从另一边<filter> JdbcTemplate直接使用也是不错的选择。

重新。 insert-if。如果您对表有唯一约束,它也可以工作。在这种情况下,将抛出异常。如果你有<publish-subscribe-channel ignore-failures=false>,那也可以。