当前位置: 首页 > 知识库问答 >
问题:

如何在spring batch和spring Integration中从itemWriter编写输出通道?

壤驷承
2023-03-14

首先感谢大家的关注,我将spring batch和spring integration结合起来,定义了一个作业流,从ftp适配器中检索文件发送到jobChannel,并用spring batch对其进行处理,我要写到输出通道,处理后使用通道,我的代码是:

     <int-ftp:outbound-gateway id="gatewayGET"
                                  local-directory-expression="'./backup/' +#remoteDirectory"
                                  session-factory="ftpSessionFactory"
                                  request-channel="toGetChannel"
                                  reply-channel="toProcessChannel"
                                  command="get"
                                  temporary-file-suffix=".writing"
                                  command-options="-P"
                                  expression="payload.remoteDirectory + '/' + payload.filename"/>
        <int:channel id="toProcessChannel">
            <int:interceptors>
                <int:wire-tap channel="logger2"/>
            </int:interceptors>
        </int:channel>
    <int:channel id="outboundJobRequestChannel"/>
    <int:channel id="replyJobChannel"/>
   <service-activator input-channel="jobLaunchReplyChannel"/>
 <int:transformer input-channel="toProcessChannel" output-channel="outboundJobRequestChannel">
        <bean class="ir.isc.macna.configuration.FileMessageToJobRequest">
            <property name="fileParameterName" value="fileName"/>
        </bean>
    </int:transformer>
    <batch-int:job-launching-gateway request-channel="outboundJobRequestChannel"
                                     reply-channel="jobLaunchReplyChannel"/>
@Component
@StepScope
public class MacnaFileWriter implements ChunkMessageChannelItemWriter<FileInfo> {

    @Autowired
    @Qualifier("replyJobChannel")
    private MessageChannel messageChannel;
    @Override
    public void write(List<? extends FileInfo> list) throws Exception {

       // send Message to replyJobChannel channel with Send method
    }
}
<int-ftp:outbound-gateway session-factory="ftpSessionFactory"
                              request-channel="replyJob"
                              command="mput"
                              auto-create-directory="true"
                              expression="payload"
                              remote-directory-expression="payload.remoteDirectory + '/' + payload.filename + '.out'"
                              reply-channel="output"/>

共有1个答案

宋宇
2023-03-14

MessageChannel具有Send方法。为此,您可以使用MessageBuilder为您的有效负载创建消息

由于它只是一个 ,因此与任何其他MessageChannel都没有区别。定义消费者的标准方法如下:

<service-activator input-channel="jobLaunchReplyChannel"/>

但是,不清楚为什么要将消息发送到JobLaunchReplyChannel,因为该通道是针对 (JobLaunchingGgateway类)的结果的:

jobExecution = this.jobLaunchingMessageHandler.launch(jobLaunchRequest);

请参见Spring批处理集成文档。

也许您需要AsynciteMwriterChunkMessageChannelItemWriter

 类似资料:
  • 我的情况: 我在readerItem中从db读取了类A。然后我需要处理这个类A并创建我在item处理机中做的类B。最后,我将这个类B保存到itemWriter中的db中。 问题:在处理过程中,我还需要创建具有类B外键的类C(约1 mil记录)并保存该类C。 我不能做这样的事情:因为正如我写的,我有大约100万条记录,我需要在内存中存储大约2gb的空间。所以我应该如何解决这个问题。 更新: 可能的解

  • 我正在努力跟上“现代”C的速度,特别是使用模板。我得到了一个班级分数,超过了 我的问题——有没有一种方法可以为多种容器类型编写类似于下面代码的模板? 只要T有一个值,上面的代码就以多行格式正确输出向量 我还意识到,对于所有类型,以通用方式覆盖容器的输出可能是个坏主意(或者至少是不礼貌的)。因此,上面的模板代码最终会将typename硬编码/限制为“Point”和一个模板化容器。 好的,根据Andy

  • 问题内容: 我正在寻找一种解决方案,可以多路复用一些通道输出。 我有一个数据源,它是从我发送到单个通道的读取的。另一方面,我有一个从通道读取的websocket请求处理程序。现在,发生了两个客户端创建一个websocket连接的情况,它们均从同一通道读取,但每个客户端仅获得部分消息。 代码示例(简体): 现在,当两次被调用时,第二个调用仅返回在第一个调用中创建的通道,这将导致上述问题。 问题是:

  • 我无法将Gatling的数据实时发送到influxDB。 我在Windows10上。加特林版本:2.3.0(最后一个)。InflxDB版本:1.3.5(最后一个是1.3.6)。 我的Gatling.conf: 我连接到inflxdb 我连接到我的数据库了。然后: 和 安东尼

  • 了解如何在“代码”视图中工作并充分利用 Dreamweaver 的编码功能。 可通过多种方式在 Dreamweaver 中处理代码。 您可以使用“新建文档”对话框打开新的代码文件,然后开始键入您的代码。在 Dreamweaver 中创建新的代码文件 键入时,会显示代码提示以帮助您选择代码和避免打字错误。如果需要,可使用 Dreamweaver 的有用的快捷文档获取 CSS 的相关帮助。 还可以使用

  • 用例:步骤1:ItemReader:从数据库中读取1000个ItemProcessor块中的数据:处理这些数据。ItemWriter:将数据写入地图,以便下一步使用 步骤2:ItemReader:读取地图ItemProcessor:处理地图数据并获取新对象。ItemWriter:将新的进程对象持久化到数据库中。 现在我希望Map在整个作业中保持不变,目前我已经为Map创建了一个不同的POJO类,并