具有StepScope批注的PoiItemReader不读取Excel文件

我想将Spring

Batch中的JobParameter传递给我的PoiItemReader,以找到Excelfilepath。所以我必须使用注释@StepScope

@StepScope

@Bean

ItemReader<StudentDTO> excelStudentReader( @Value("#{jobParameters[filePath]}") String filePath) {

PoiItemReader<StudentDTO> reader = new PoiItemReader<>();

reader.setResource(new ClassPathResource(filePath));

reader.setRowMapper(new StudentExcelRowMapper());

return reader;

}

作业无例外地启动,但读者不阅读Excelfile。

Job: [FlowJob: [name=importUserJob]] launched with the following parameters: [{filePath=files/sample-data.xlsx, time=1515056077325}]  

Executing step: [step1]

Job: [FlowJob: [name=importUserJob]] completed with the following parameters: [{filePath=files/sample-data.xlsx, time=1515056077325}] and the following status: [COMPLETED]

如果删除注释@StepScope并直接将路径提供给ItemReader,则PoiItemReader会读取ExcelFile。

Job: [FlowJob: [name=importUserJob]] launched with the following parameters: [{filePath=files/sample-data.xlsx, time=1515055832722}]  

Executing step: [step1]

StudentDTO [emailAddress=tony.tester@gmail.com , name=Tony Tester, purchasedPackage=master]

StudentDTO [emailAddress=nick.newbie@gmail.com, name=Nick Newbie , purchasedPackage=starter]

StudentDTO [emailAddress=ian.intermediate@gmail.com, name=Ian Intermediate, purchasedPackage=intermediate]

Job: [FlowJob: [name=importUserJob]] completed with the following parameters: [{filePath=files/sample-data.xlsx, time=1515055966700}] and the following status: [COMPLETED]

我有来自https://github.com/mdeinum/spring-batch-

extensions的PoiItemReader,

该代码来自教程:https :

//www.petrikainulainen.net/programming/spring-framework/spring-batch-tutorial-

reading 来自Excel文件的信息/

BatchConfiguration.java

@Configuration

@EnableBatchProcessing

public class BatchConfiguration {

@Autowired

public JobBuilderFactory jobBuilderFactory;

@Autowired

public StepBuilderFactory stepBuilderFactory;

@StepScope

@Bean

ItemReader<StudentDTO> excelStudentReader( @Value("#

{jobParameters[filePath]}") String filePath) {

PoiItemReader<StudentDTO> reader = new PoiItemReader<>();

reader.setResource(new ClassPathResource(filePath));

reader.setLinesToSkip(1);

reader.setRowMapper(new StudentExcelRowMapper());

return reader;

}

public CustomWriter writer() {

return new CustomWriter();

}

@Bean

public Job importUserJob() {

return jobBuilderFactory.get("importUserJob")

.incrementer(new RunIdIncrementer())

.flow(step1())

.end()

.build();

}

@Bean

public Step step1() {

return stepBuilderFactory.get("step1")

.<StudentDTO, StudentDTO> chunk(10)

.reader(excelStudentReader(null))

.writer(writer())

.build();

}

}

CustomWriter.java

public class CustomWriter implements ItemWriter<StudentDTO> {

public void write(List<? extends StudentDTO> arg0) throws Exception {

for (StudentDTO s : arg0){

System.out.println(s.toString());

}

}

}

应用程序

@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class})

public class Application {

public static void main(String[] args) throws Exception {

SpringApplication.run(Application.class, args);

try {

JobParameters param = new JobParametersBuilder().addString("filePath", "files/sample-data.xlsx")

.addLong("time", System.currentTimeMillis()).toJobParameters();

ApplicationContext context = new AnnotationConfigApplicationContext(BatchConfiguration.class);

JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher");

Job job = (Job) context.getBean(Job.class);

jobLauncher.run(job, param);

} catch (Exception e) {

System.out.println(e.getMessage());

}

}

}

设置StepScope批注对于访问JobParameters是必需的,并且我没有问题可以将参数传递给FlatFileItemReader。我认为问题是PoiItemReader。

我如何用PoiItemReader读取excelFile并从Spring Batch的JobParameters获取filePath?

回答:

@Step范围不适用于通用Reader,即ItemReader<StudentDTO>您需要将其更改为PoiItemReader<StudentDTO>

以上是 具有StepScope批注的PoiItemReader不读取Excel文件 的全部内容, 来源链接: utcz.com/qa/409527.html

回到顶部