|
对于最新稳定版本,请使用 Spring Integration 7.0.0! |
出站网关
出站网关就像是出站和入站适配器的结合:其角色是处理一条消息,并用它来执行SQL查询,然后通过发送结果到回复通道来响应。 默认情况下,消息有效载荷和头部作为查询的输入参数可用,如下示例所示:
<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})到输出通道。
如果更新查询是带有自动生成键的插入,你可以通过添加添加生成键来填充回复消息keys-generated=“true”对准前面的例子(这不是默认设置,因为某些数据库平台不支持)。
以下示例展示了变换后的配置:
<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"/>
你也可以选择一个选择查询,从结果中执行并生成回复消息(例如入站适配器),如下示例所示:
<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 更新查询不再是强制的。
你现在只能通过以下任一查询属性或查询元素。
如果你需要主动检索数据,比如使用通用网关或有效载荷增强器,这非常有用。
随后,回复消息由结果生成(类似于入站适配器的工作原理),并传递给回复信道。
以下示例展示了使用查询属性:
<int-jdbc:outbound-gateway
query="select * from foos where id=:headers[id]"
request-channel="input"
reply-channel="output"
data-source="dataSource"/>
|
默认情况下,该组件 |
和通道适配器一样,你也可以提供SqlParameterSourceFactory请求与回复的实例。
默认设置与出站适配器相同,因此请求消息可作为表达式的根节点使用。
如果keys-generated=“true”,表达式的根是生成的键(如果只有一个则是映射,若多值则为列表)。
出站网关需要引用以下任一数据来源或者Jdbc模板.
它也可以有SqlParameterSourceFactory注入以控制输入消息与查询的绑定。
从4.2版本开始,请求-准备-语句设置器属性可在<int-jdbc:outbound-gateway>作为替代方案request-sql-parameter-source-factory.
它允许你指定一个MessagePreparedStatementSetterBEAN Reference,实现了更复杂的功能准备陈述执行前的准备。
从6.0版本开始,Jdbc外发网关返回一个空列表结果,而不是将其转换为零就像之前的意思一样,意思是“无回复”。
这在处理空列表是下游逻辑一部分的应用中,导致了额外的配置。
请参阅分路器丢弃通道,了解可能的空列表处理选项。
更多信息请参见外呼通道适配器MessagePreparedStatementSetter.