Spring集成:使用RowMapper时入站通道适配器更新查询参数异常
我的目标是从表中读取行,并将它们作为消息放到通道中,然后更新表。 我正在使用RowMapper将结果集转换为对象列表(list)Spring集成:使用RowMapper时入站通道适配器更新查询参数异常,spring,spring-integration,Spring,Spring Integration,我的目标是从表中读取行,并将它们作为消息放到通道中,然后更新表。 我正在使用RowMapper将结果集转换为对象列表(list) <si:channel id="output"> <si:queue capacity="50" /> <si:interceptors> <si:wire-tap channel="logger"/> </si:interceptors> </si:channel> <
<si:channel id="output">
<si:queue capacity="50" />
<si:interceptors>
<si:wire-tap channel="logger"/>
</si:interceptors>
</si:channel>
<si-jdbc:inbound-channel-adapter channel="input" data-source="myDataSource" auto-startup="true" query="SELECT * FROM STATUS_TABLE WHERE MESSAGE_STATUS ='WAITING'"
update="UPDATE STATUS_TABLE SET MESSAGE_STATUS='IN_PROGRESS' WHERE STATUS_TABLE_ID IN (:payload[Status.id])" max-rows-per-poll="20" row-mapper="rowMapper" update-per-row="true">
<si:poller fixed-rate="60000">
<si:transactional/>
</si:poller>
</si-jdbc:inbound-channel-adapter>
<bean id="rowMapper" class="com.test.StatusMapper"></bean>
这里是我的问题:更新查询参数应该是什么:状态表ID在(:payload[STATUS.ID])中,因为有效负载将是列表并用于查询状态。ID是正确的语法吗
<si:channel id="output">
<si:queue capacity="50" />
<si:interceptors>
<si:wire-tap channel="logger"/>
</si:interceptors>
</si:channel>
<si-jdbc:inbound-channel-adapter channel="input" data-source="myDataSource" auto-startup="true" query="SELECT * FROM STATUS_TABLE WHERE MESSAGE_STATUS ='WAITING'"
update="UPDATE STATUS_TABLE SET MESSAGE_STATUS='IN_PROGRESS' WHERE STATUS_TABLE_ID IN (:payload[Status.id])" max-rows-per-poll="20" row-mapper="rowMapper" update-per-row="true">
<si:poller fixed-rate="60000">
<si:transactional/>
</si:poller>
</si-jdbc:inbound-channel-adapter>
<bean id="rowMapper" class="com.test.StatusMapper"></bean>
我的配置:
<si:channel id="output">
<si:queue capacity="50" />
<si:interceptors>
<si:wire-tap channel="logger"/>
</si:interceptors>
</si:channel>
<si-jdbc:inbound-channel-adapter channel="input" data-source="myDataSource" auto-startup="true" query="SELECT * FROM STATUS_TABLE WHERE MESSAGE_STATUS ='WAITING'"
update="UPDATE STATUS_TABLE SET MESSAGE_STATUS='IN_PROGRESS' WHERE STATUS_TABLE_ID IN (:payload[Status.id])" max-rows-per-poll="20" row-mapper="rowMapper" update-per-row="true">
<si:poller fixed-rate="60000">
<si:transactional/>
</si:poller>
</si-jdbc:inbound-channel-adapter>
<bean id="rowMapper" class="com.test.StatusMapper"></bean>
我的RowMapper类:
<si:channel id="output">
<si:queue capacity="50" />
<si:interceptors>
<si:wire-tap channel="logger"/>
</si:interceptors>
</si:channel>
<si-jdbc:inbound-channel-adapter channel="input" data-source="myDataSource" auto-startup="true" query="SELECT * FROM STATUS_TABLE WHERE MESSAGE_STATUS ='WAITING'"
update="UPDATE STATUS_TABLE SET MESSAGE_STATUS='IN_PROGRESS' WHERE STATUS_TABLE_ID IN (:payload[Status.id])" max-rows-per-poll="20" row-mapper="rowMapper" update-per-row="true">
<si:poller fixed-rate="60000">
<si:transactional/>
</si:poller>
</si-jdbc:inbound-channel-adapter>
<bean id="rowMapper" class="com.test.StatusMapper"></bean>
public class StatusMapper implements RowMapper<Status>{
@Override
public Status mapRow(ResultSet rs, int rowNum)throws SQLException {
Status status = new Status();
status.setMessageContent(rs.getString("MESSAGE_CONTENT"));
status.setId(rs.getLong("STATUS_ID"));
return status;
}
公共类StatusMapper实现行映射器{
@凌驾
公共状态映射行(ResultSet rs,int rowNum)引发SQLException{
状态=新状态();
status.setMessageContent(rs.getString(“消息内容”);
status.setId(rs.getLong(“status_ID”);
返回状态;
}
如果有人能给我指出正确的方向,那就太好了。假设
Status
有一个方法getId()
,您只需使用:id
<si:channel id="output">
<si:queue capacity="50" />
<si:interceptors>
<si:wire-tap channel="logger"/>
</si:interceptors>
</si:channel>
<si-jdbc:inbound-channel-adapter channel="input" data-source="myDataSource" auto-startup="true" query="SELECT * FROM STATUS_TABLE WHERE MESSAGE_STATUS ='WAITING'"
update="UPDATE STATUS_TABLE SET MESSAGE_STATUS='IN_PROGRESS' WHERE STATUS_TABLE_ID IN (:payload[Status.id])" max-rows-per-poll="20" row-mapper="rowMapper" update-per-row="true">
<si:poller fixed-rate="60000">
<si:transactional/>
</si:poller>
</si-jdbc:inbound-channel-adapter>
<bean id="rowMapper" class="com.test.StatusMapper"></bean>
更新查询在查询返回的对象集合上使用投影
<si:channel id="output">
<si:queue capacity="50" />
<si:interceptors>
<si:wire-tap channel="logger"/>
</si:interceptors>
</si:channel>
<si-jdbc:inbound-channel-adapter channel="input" data-source="myDataSource" auto-startup="true" query="SELECT * FROM STATUS_TABLE WHERE MESSAGE_STATUS ='WAITING'"
update="UPDATE STATUS_TABLE SET MESSAGE_STATUS='IN_PROGRESS' WHERE STATUS_TABLE_ID IN (:payload[Status.id])" max-rows-per-poll="20" row-mapper="rowMapper" update-per-row="true">
<si:poller fixed-rate="60000">
<si:transactional/>
</si:poller>
</si-jdbc:inbound-channel-adapter>
<bean id="rowMapper" class="com.test.StatusMapper"></bean>
expression=“#root.![“+expression+”]”;
<si:channel id="output">
<si:queue capacity="50" />
<si:interceptors>
<si:wire-tap channel="logger"/>
</si:interceptors>
</si:channel>
<si-jdbc:inbound-channel-adapter channel="input" data-source="myDataSource" auto-startup="true" query="SELECT * FROM STATUS_TABLE WHERE MESSAGE_STATUS ='WAITING'"
update="UPDATE STATUS_TABLE SET MESSAGE_STATUS='IN_PROGRESS' WHERE STATUS_TABLE_ID IN (:payload[Status.id])" max-rows-per-poll="20" row-mapper="rowMapper" update-per-row="true">
<si:poller fixed-rate="60000">
<si:transactional/>
</si:poller>
</si-jdbc:inbound-channel-adapter>
<bean id="rowMapper" class="com.test.StatusMapper"></bean>
这在此处的第二个注释中进行了描述
<si:channel id="output">
<si:queue capacity="50" />
<si:interceptors>
<si:wire-tap channel="logger"/>
</si:interceptors>
</si:channel>
<si-jdbc:inbound-channel-adapter channel="input" data-source="myDataSource" auto-startup="true" query="SELECT * FROM STATUS_TABLE WHERE MESSAGE_STATUS ='WAITING'"
update="UPDATE STATUS_TABLE SET MESSAGE_STATUS='IN_PROGRESS' WHERE STATUS_TABLE_ID IN (:payload[Status.id])" max-rows-per-poll="20" row-mapper="rowMapper" update-per-row="true">
<si:poller fixed-rate="60000">
<si:transactional/>
</si:poller>
</si-jdbc:inbound-channel-adapter>
<bean id="rowMapper" class="com.test.StatusMapper"></bean>
这里描述了集合投影假设状态
有一个方法getId()
,您只需使用:id
<si:channel id="output">
<si:queue capacity="50" />
<si:interceptors>
<si:wire-tap channel="logger"/>
</si:interceptors>
</si:channel>
<si-jdbc:inbound-channel-adapter channel="input" data-source="myDataSource" auto-startup="true" query="SELECT * FROM STATUS_TABLE WHERE MESSAGE_STATUS ='WAITING'"
update="UPDATE STATUS_TABLE SET MESSAGE_STATUS='IN_PROGRESS' WHERE STATUS_TABLE_ID IN (:payload[Status.id])" max-rows-per-poll="20" row-mapper="rowMapper" update-per-row="true">
<si:poller fixed-rate="60000">
<si:transactional/>
</si:poller>
</si-jdbc:inbound-channel-adapter>
<bean id="rowMapper" class="com.test.StatusMapper"></bean>
更新查询在查询返回的对象集合上使用投影
<si:channel id="output">
<si:queue capacity="50" />
<si:interceptors>
<si:wire-tap channel="logger"/>
</si:interceptors>
</si:channel>
<si-jdbc:inbound-channel-adapter channel="input" data-source="myDataSource" auto-startup="true" query="SELECT * FROM STATUS_TABLE WHERE MESSAGE_STATUS ='WAITING'"
update="UPDATE STATUS_TABLE SET MESSAGE_STATUS='IN_PROGRESS' WHERE STATUS_TABLE_ID IN (:payload[Status.id])" max-rows-per-poll="20" row-mapper="rowMapper" update-per-row="true">
<si:poller fixed-rate="60000">
<si:transactional/>
</si:poller>
</si-jdbc:inbound-channel-adapter>
<bean id="rowMapper" class="com.test.StatusMapper"></bean>
expression=“#root.![“+expression+”]”;
<si:channel id="output">
<si:queue capacity="50" />
<si:interceptors>
<si:wire-tap channel="logger"/>
</si:interceptors>
</si:channel>
<si-jdbc:inbound-channel-adapter channel="input" data-source="myDataSource" auto-startup="true" query="SELECT * FROM STATUS_TABLE WHERE MESSAGE_STATUS ='WAITING'"
update="UPDATE STATUS_TABLE SET MESSAGE_STATUS='IN_PROGRESS' WHERE STATUS_TABLE_ID IN (:payload[Status.id])" max-rows-per-poll="20" row-mapper="rowMapper" update-per-row="true">
<si:poller fixed-rate="60000">
<si:transactional/>
</si:poller>
</si-jdbc:inbound-channel-adapter>
<bean id="rowMapper" class="com.test.StatusMapper"></bean>
这在此处的第二个注释中进行了描述
<si:channel id="output">
<si:queue capacity="50" />
<si:interceptors>
<si:wire-tap channel="logger"/>
</si:interceptors>
</si:channel>
<si-jdbc:inbound-channel-adapter channel="input" data-source="myDataSource" auto-startup="true" query="SELECT * FROM STATUS_TABLE WHERE MESSAGE_STATUS ='WAITING'"
update="UPDATE STATUS_TABLE SET MESSAGE_STATUS='IN_PROGRESS' WHERE STATUS_TABLE_ID IN (:payload[Status.id])" max-rows-per-poll="20" row-mapper="rowMapper" update-per-row="true">
<si:poller fixed-rate="60000">
<si:transactional/>
</si:poller>
</si-jdbc:inbound-channel-adapter>
<bean id="rowMapper" class="com.test.StatusMapper"></bean>
这里描述集合投影
<si:channel id="output">
<si:queue capacity="50" />
<si:interceptors>
<si:wire-tap channel="logger"/>
</si:interceptors>
</si:channel>
<si-jdbc:inbound-channel-adapter channel="input" data-source="myDataSource" auto-startup="true" query="SELECT * FROM STATUS_TABLE WHERE MESSAGE_STATUS ='WAITING'"
update="UPDATE STATUS_TABLE SET MESSAGE_STATUS='IN_PROGRESS' WHERE STATUS_TABLE_ID IN (:payload[Status.id])" max-rows-per-poll="20" row-mapper="rowMapper" update-per-row="true">
<si:poller fixed-rate="60000">
<si:transactional/>
</si:poller>
</si-jdbc:inbound-channel-adapter>
<bean id="rowMapper" class="com.test.StatusMapper"></bean>