gpt4 book ai didi

Spring Batch - 从远程位置复制文件

转载 作者:行者123 更新时间:2023-12-04 18:05:46 25 4
gpt4 key购买 nike

我是 Spring 批处理的新手。我需要实现以下目标:第 1 步:将文件从远程位置复制到本地目录。第 2 步:处理文件的每一行。第 3 步:将处理后的行存储到数据库中。

后两步我有把握,但是第一步怎么实现呢?

感谢您的帮助。

最佳答案

你可以编写一个 tasklet 来实现这个,这个 tasklet 将在单独的步骤中

<step id="movingFile" next="step2">
<tasklet ref="voterImportFileMovingTasklet" />
<listeners>
<listener ref="stepLevelListener" />
</listeners>
</step>
<step id="step2" >
<chunk reader="FileReader" processor="ItemProcessor" writer="ItemWriter" commit-interval="300"
skip-limit="1000">
<skippable-exception-classes>
<include class="java.lang.Exception" />
</skippable-exception-classes>
<listeners>
<listener ref="voterImportListener" />
</listeners>
</chunk>
</step>

Tasklet 将是

public class FileMovingTasklet implements Tasklet, InitializingBean {
private Resource sourceDirectory;
private Resource targetDirectory;



private static final Log LOG = LogFactory.getLog(FileMovingTasklet.class);

public Resource getSourceDirectory() {
return sourceDirectory;
}

public void setSourceDirectory(Resource sourceDirectory) {
this.sourceDirectory = sourceDirectory;
}

public Resource getTargetDirectory() {
return targetDirectory;
}

public void setTargetDirectory(Resource targetDirectory) {
this.targetDirectory = targetDirectory;
}


@Override
public void afterPropertiesSet() throws Exception {
Assert.notNull(sourceDirectory, "Source directory must be set");
Assert.notNull(targetDirectory, "Target directory must be set");
}

@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {

InputStream inStream = null;
OutputStream outStream = null;
File[] files;
File dir = sourceDirectory.getFile();
Assert.state(dir.isDirectory());
files = dir.listFiles();
File bfile = null;
for (int i = 0; i < files.length; i++) {


bfile = new File(targetDirectory.getURL().getPath() + File.separator + files[i].getName());

inStream = new FileInputStream(files[i]);
outStream = new FileOutputStream(bfile);

byte[] buffer = new byte[1024];

int length;
// copy the file content in bytes
while ((length = inStream.read(buffer)) > 0) {

outStream.write(buffer, 0, length);

}

inStream.close();
outStream.close();
}
return RepeatStatus.FINISHED;
}

关于Spring Batch - 从远程位置复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26976236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com