现在,我正在使用jobParameters获取我的FlatFileItemReader和FlatFileItemWriter的文件名.可以测试我的批处理,但我的目标是读取某个目录中的文件(此目录中只有此文件),文件名可能会更改.输出文件名应取决于输入文件名.
因此,我考虑在我的工作中添加一个新步骤,此步骤将通过搜索好目录并在其中查找文件来设置输出和输入文件名.我从Spring文档中读取了将数据传递给Future Steps,以及来自SO的这个线程,但是我无法使其工作,文件总是"空".
首先,我定义了以下Tasklet
public class SettingFilenamesTasklet implements Tasklet {
private StepExecution stepExecution;
@Override
public RepeatStatus execute(StepContribution contribution, ChunkContext chunkContext) throws Exception {
// TODO Search folder and set real filenames
String inputFilename = "D:/TestInputFolder/dataFile.csv";
String outputFilename = "D:/TestOutputFolder/dataFile-processed.csv";
ExecutionContext stepContext = stepExecution.getExecutionContext();
stepContext.put("inputFile", inputFilename);
stepContext.put("outputFile", outputFilename);
return RepeatStatus.FINISHED;
}
@BeforeStep
public void saveStepExecution(StepExecution stepExec) {
stepExecution = stepExec;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我添加了promotionListener bean
@Bean
public ExecutionContextPromotionListener promotionListener() {
ExecutionContextPromotionListener listener = new ExecutionContextPromotionListener();
listener.setKeys(new String[]{
"inputFile", …Run Code Online (Sandbox Code Playgroud) 我想用spring表达式语言获得job id.我试过#{jobExecutionContext[jobId]}但它不起作用.
是否可以在Spring批处理中获取ItemWriter中的jobId或JobName.
我读到了关于后期绑定但不确定如何使用它来获取Item Writer中的作业名称或作业ID.
我把我的作家配置为
<bean id="myWriter" ref="com.eg.man.EodWriter" scope="step">
<property name="jobInstanceId" value="#{stepExecution.jobExecution.jobId}"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
但我不知道如何在作家类中使用它来获取价值.
编辑我也发现这个链接说你可以在写入中获取id但是再次如何在编写器类中使用它