【问题标题】:Spring Batch Java configuration - Writing to remote sftp xml file without local fileSpring Batch Java配置-在没有本地文件的情况下写入远程sftp xml文件
【发布时间】:2019-01-04 12:43:10
【问题描述】:

我需要在 Spring Batch 应用程序中将 xml 文件写入 sftp 服务器。目前下面的代码使用 StaxEventItemWriter 将 xml 文件写入本地文件系统。我需要直接写入远程服务器,而不是将其写入本地然后移动到 sftp 服务器。引用此链接 (Writing to a remote file using Spring Integrations Sftp Streaming java configuration) 但不确定如何使用带有远程文件的 StaxEventItemWriter/setup Resource 对象进行编写

public void write(List<? extends UserDTO> items) throws Exception {
    for(UserDTO item : items) {
        StaxEventItemWriter<UserDTO> staxWriter = getStaxEventItemWriter(item);
        staxWriter.write(Arrays.asList(item));
    }
}

private StaxEventItemWriter<UserDTO> getStaxEventItemWriter(UserDTO user) {

    String key = user.getDomain();      
    StaxEventItemWriter<UserDTO> writer = writers.get(key);
    if (writer == null) {enter code here
        writer = new StaxEventItemWriter<>();
        try {
            UrlResource resource = new UrlResource("file:"+outputDir+"/"+key+"_"+fileName+".xml");
            writer.setResource(resource);
            writer.setRootTagName("customerSet");
            Jaxb2Marshaller UserMarshaller = new Jaxb2Marshaller();
            UserMarshaller.setClassesToBeBound(UserDTO.class);
            writer.setMarshaller(UserMarshaller);
            writer.setOverwriteOutput(Boolean.TRUE);
            writer.open(executionContext);

        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        writers.put(key, writer);

    }
    return writer;
}

【问题讨论】:

标签: java spring spring-integration spring-batch spring-integration-sftp


【解决方案1】:

您或许可以尝试使用基于 Spring Integration 的 SftpResource(类似于您共享的链接中的解决方案)并在您的 StaxEventItemWriter 中使用它。

【讨论】:

  • 抱歉,我没有注意到SftpResource 没有实现org.springframework.core.io.WritableResource。您实际上需要一个类似的可写资源类并将其与StaxEventItemWriter 一起使用。
  • 如果有的话,请给我指出一个 SftpResource 的 WritableResource 实现示例,因为我不确定在这种情况下如何为 StaxEventItemWriter 实现
  • The answer 在您提出问题的链接中包含您将在 WritableResource 实施中使用的代码示例。
  • 我是否需要使用示例代码实现 WritableResource 的 getOutputStream() 以及如何调用它,因为 StaxEventItemWriter 刚刚具有 setResource()?
猜你喜欢
  • 1970-01-01
  • 2014-12-05
  • 2011-12-15
  • 1970-01-01
  • 2016-06-26
  • 1970-01-01
  • 2019-08-03
  • 2011-02-02
  • 1970-01-01
相关资源
最近更新 更多