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

从sFtp服务器读取文件

富昕
2023-03-14

我正在从sftp服务器读取文件,并使用Spring Batch Framework将该文件加载到数据库中。下面是我的代码,但我遇到了一个错误

代码:

<bean id="cvsFileItemReaderMeta" class="org.springframework.batch.item.file.FlatFileItemReader">
    <!-- Read a csv file -->

    <property name="resource" value= "ftp://scmuser:scmuser%40123@172.18.228.32:22/home/scmuser/CSV/Meta.csv" />

错误:

org.springframework.batch.item.ItemStreamException: Failed to initialize the reader
    at org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.open(AbstractItemCountingItemStreamItemReader.java:142)
    at org.springframework.batch.item.support.CompositeItemStream.open(CompositeItemStream.java:96)
    at org.springframework.batch.core.step.item.ChunkMonitor.open(ChunkMonitor.java:115)
    at org.springframework.batch.item.support.CompositeItemStream.open(CompositeItemStream.java:96)
    at org.springframework.batch.core.step.tasklet.TaskletStep.open(TaskletStep.java:306)
    at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:192)
    at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:137)
    at org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(JobFlowExecutor.java:64)
    at org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:60)
    at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:152)
    at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:131)
    at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:135)
    at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:301)
    at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:134)
    at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:49)
    at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:127)
    at com.tcs.ceg.iforesee.service.DataLoader.loadMetaMapping(DataLoader.java:127)
    at com.tcs.ceg.iforesee.service.UploadFile.uploadFile(UploadFile.java:77)
    at com.tcs.ceg.iforesee.service.UploadFile.main(UploadFile.java:22)
Caused by: java.lang.IllegalStateException: Input resource must exist (reader is in 'strict' mode): URL [ftp://username:password@hostname.com:22/home/scmuser/CSV/Meta.csv]
    at org.springframework.batch.item.file.FlatFileItemReader.doOpen(FlatFileItemReader.java:251)
    at org.springframework.batch.item.support.AbstractItemCountingItemStreamItemReader.open(AbstractItemCountingItemStreamItemReader.java:139)

共有2个答案

莘聪
2023-03-14

实现目标并更好地处理错误的另一种方法是将下载导入分为两步:

  1. 从FTP检索文件(您可以使用dedicer/exit状态、未完成的文件下载等来处理丢失的文件)
谯和煦
2023-03-14

原因:java。lang.IllegalStateException:输入资源必须存在(读取器处于“严格”模式):URL[ftp://username:password@主机名。com:22/home/scmuser/CSV/Meta。csv]

显然资源不存在。您要么必须在尝试打开资源之前确保资源存在,要么使用FlatFileItemReader#setStrict取消设置阅读器的严格模式并传递false

在严格模式下,读取器将在AbstractItemCountingItemStreamItemReader上引发异常。如果输入资源不存在,请打开(org.springframework.batch.item.ExecutionContext)。

 类似资料:
  • 问题内容: 我正在尝试找到一种方法,可以通过SFTP从服务器读取大型动态日志文件的末尾(如末尾20-30行),并将该点保存到读取的位置,如果需要读取更多行,则可以读取更多内容从这一点上来看。 我尝试过的所有事情都花费了很长时间,我试图将其复制到计算机上,然后再从终端读取以使用该方法,因为这种方法需要对象,通过SFTP时,您只会得到很多东西,而下载文件需要很多时间。 还尝试对行进行计数并从n行读取,

  • 我在生产环境中使用redis server,在HA中使用redis Sentinel。但是阅读文档,当客户机连接到sentinel时,sentinel将主redis服务器提供给客户机。 是所有的读写操作都在主服务器上进行,而从服务器只用于故障转移,还是我们可以使用从服务器读取数据?

  • 问题内容: 我正在使用jsch从服务器下载文件,下面是我的代码。 com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2629) at com.jcraft.jsch.ChannelSftp._get(ChannelSftp.java:977) at com.jcraft.jsch.ChannelSftp.get(Channe

  • 我正在尝试从我的ftp服务器读取csv文件。链接看起来像: 然而,d3不喜欢它。 在chrome中,我得到以下错误: 我有大量的数据文件~12GB,ftp服务器是我在线存储数据最方便的方式 有没有办法解决这个问题?

  • 问题内容: 我正在尝试使用Java从使用SFTP(而不是FTPS)的服务器检索文件。我怎样才能做到这一点? 问题答案: 另一个选择是考虑查看JSch库。JSch似乎是一些大型开源项目的首选库,其中包括Eclipse,Ant和Apache Commons HttpClient。 它很好地支持用户/通过和基于证书的登录,以及所有其他许多美味的SSH2功能。 这是通过SFTP检索的简单远程文件。错误处理

  • 问题内容: 我正在尝试使用来自Python的SSH从服务器读取文件。我正在使用Paramiko进行连接。我可以连接到服务器并运行类似的命令,然后从服务器获取数据,但是我尝试读取的某些文件的大小约为1 GB或更大。 如何使用Python在服务器上逐行读取文件? 附加信息:通常要做的是运行命令并将结果存储在变量中并加以解决。但是由于这里的文件很大,我正在寻找一种从服务器逐行读取文件的方法。 编辑:我可