对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

对于最新的稳定版本,请使用 Spring Integration 6.3.1Spring中文文档

出站网关类似于出站适配器和入站适配器的组合:它的作用是处理消息并使用它来执行 SQL 查询,然后通过将结果发送到回复通道来响应结果。 默认情况下,消息负载和标头可用作查询的输入参数,如以下示例所示:Spring中文文档

<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" />

前面示例的结果是将一条记录插入到表中,并向输出通道返回一条消息,指示受影响的行数(有效负载是 map: )。mythings{UPDATED=1}Spring中文文档

如果更新查询是具有自动生成的键的插入,则可以通过添加到前面的示例(这不是默认值,因为某些数据库平台不支持它)来填充回复消息。 以下示例显示了更改的配置:keys-generated="true"Spring中文文档

<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中文文档

<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 查询不再是必需的。 现在,通过使用属性或元素,只能提供选择查询。 如果您需要使用通用网关或有效负载扩充器等方式主动检索数据,这将非常有用。 然后,从结果生成应答消息(类似于入站适配器的工作方式)并传递到应答通道。 以下示例演示如何使用该属性:queryqueryquerySpring中文文档

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

默认情况下,查询的组件仅从游标返回一行(第一行)。 您可以使用该选项调整此行为。 如果需要返回 SELECT 中的所有行,请考虑指定 。SELECTmax-rowsmax-rows="0"Spring中文文档

默认情况下,查询的组件仅从游标返回一行(第一行)。 您可以使用该选项调整此行为。 如果需要返回 SELECT 中的所有行,请考虑指定 。SELECTmax-rowsmax-rows="0"Spring中文文档

与通道适配器一样,您还可以提供请求和应答的实例。 缺省值与出站适配器的缺省值相同,因此请求消息可用作表达式的根目录。 如果 ,则表达式的根是生成的键(如果只有一个键,则为映射,如果为多值,则为映射列表)。SqlParameterSourceFactorykeys-generated="true"Spring中文文档

出站网关需要引用 a 或 . 它还可以注入以控制传入消息与查询的绑定。DataSourceJdbcTemplateSqlParameterSourceFactorySpring中文文档

从版本 4.2 开始,该属性可作为 的替代项。 它允许您指定一个 Bean 引用,该引用在执行之前实现更复杂的准备工作。request-prepared-statement-setter<int-jdbc:outbound-gateway>request-sql-parameter-source-factoryMessagePreparedStatementSetterPreparedStatementSpring中文文档

从版本 6.0 开始,按原样返回空列表结果,而不是将其转换为之前的状态,意思是“无回复”。 这导致了在处理空列表是下游逻辑一部分的应用程序中的额外配置。 请参阅 Splitter Discard Channel 了解可能的空列表处理选项。JdbcOutboundGatewaynullSpring中文文档

有关 的更多信息,请参见出站通道适配器MessagePreparedStatementSetterSpring中文文档