对于最新稳定版本,请使用 Spring Integration 7.0.0spring-doc.cadn.net.cn

出站网关

出站网关就像是出站和入站适配器的结合:其角色是处理一条消息,并用它来执行SQL查询,然后通过发送结果到回复通道来响应。 默认情况下,消息有效载荷和头部作为查询的输入参数可用,如下示例所示:spring-doc.cadn.net.cn

<int-jdbc:outbound-gateway
    update="insert into mythings (id, status, name) values (:headers[id], 0, :payload[thing])"
    request-channel="input" reply-channel="output" data-source="dataSource" />

前述示例的结果是将记录插入到我的事表并返回一条消息,表示受影响行数(有效载荷为映射:{更新=1})到输出通道。spring-doc.cadn.net.cn

如果更新查询是带有自动生成键的插入,你可以通过添加添加生成键来填充回复消息keys-generated=“true”对准前面的例子(这不是默认设置,因为某些数据库平台不支持)。 以下示例展示了变换后的配置:spring-doc.cadn.net.cn

<int-jdbc:outbound-gateway
    update="insert into mythings (status, name) values (0, :payload[thing])"
    request-channel="input" reply-channel="output" data-source="dataSource"
    keys-generated="true"/>

你也可以选择一个选择查询,从结果中执行并生成回复消息(例如入站适配器),如下示例所示:spring-doc.cadn.net.cn

<int-jdbc:outbound-gateway
    update="insert into foos (id, status, name) values (:headers[id], 0, :payload[foo])"
    query="select * from foos where id=:headers[$id]"
    request-channel="input" reply-channel="output" data-source="dataSource"/>

自 Spring Integration 2.2 起,SQL 更新查询不再是强制的。 你现在只能通过以下任一查询属性或查询元素。 如果你需要主动检索数据,比如使用通用网关或有效载荷增强器,这非常有用。 随后,回复消息由结果生成(类似于入站适配器的工作原理),并传递给回复信道。 以下示例展示了使用查询属性:spring-doc.cadn.net.cn

<int-jdbc:outbound-gateway
    query="select * from foos where id=:headers[id]"
    request-channel="input"
    reply-channel="output"
    data-source="dataSource"/>

默认情况下,该组件选择查询只返回光标的第一行。 你可以用最大行数选择。 如果你需要返回 SELECT 的所有行,可以考虑指定max-rows=“0”.spring-doc.cadn.net.cn

和通道适配器一样,你也可以提供SqlParameterSourceFactory请求与回复的实例。 默认设置与出站适配器相同,因此请求消息可作为表达式的根节点使用。 如果keys-generated=“true”,表达式的根是生成的键(如果只有一个则是映射,若多值则为列表)。spring-doc.cadn.net.cn

出站网关需要引用以下任一数据来源或者Jdbc模板. 它也可以有SqlParameterSourceFactory注入以控制输入消息与查询的绑定。spring-doc.cadn.net.cn

从4.2版本开始,请求-准备-语句设置器属性可在<int-jdbc:outbound-gateway>作为替代方案request-sql-parameter-source-factory. 它允许你指定一个MessagePreparedStatementSetterBEAN Reference,实现了更复杂的功能准备陈述执行前的准备。spring-doc.cadn.net.cn

从6.0版本开始,Jdbc外发网关返回一个空列表结果,而不是将其转换为就像之前的意思一样,意思是“无回复”。 这在处理空列表是下游逻辑一部分的应用中,导致了额外的配置。 请参阅分路器丢弃通道,了解可能的空列表处理选项。spring-doc.cadn.net.cn

更多信息请参见外呼通道适配器MessagePreparedStatementSetter.spring-doc.cadn.net.cn