Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring集成:使用RowMapper时入站通道适配器更新查询参数异常_Spring_Spring Integration - Fatal编程技术网

Spring集成:使用RowMapper时入站通道适配器更新查询参数异常

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

我的目标是从表中读取行,并将它们作为消息放到通道中,然后更新表。 我正在使用RowMapper将结果集转换为对象列表(list)

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