我想在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]
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-information-from-an-excel-file/
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。
如何使用从Spring Batch中的JobParameters中获取filePath的PoiItemReader来读取excelFile?
@step
作用域不适用于一般阅读器,即itemreader
您需要将其更改为poiitemreader
我的用例有点奇怪,但基本上,我想读取yaml文件的一部分并将其映射到Spring应用程序中适当的java对象。这是Spring中一个非常常见且琐碎的操作(只需使用@ConfigurationProperties)。 然而,在我的情况下,我希望在生命周期的早期完成这一阅读,即在BeanFactoryPostProcessor挂接的时候,以便使用yml中指定的指令动态创建多个bean。 我可以和app
问题内容: 我正在尝试读取Excel文件(Office 2003)。有一个Excel文件需要上载并对其内容进行解析。 通过Google,我只能找到以下相关(且主题不足)的答案:生成Excel文件,读取Excel XML文件,读取Excel CSV文件或不完整的废弃项目。我拥有Office 2003,因此如果我需要那里的任何文件,都可以使用它们。它已安装在我的盒子上,但尚未安装,也无法安装在我的共享
第一版 我将以编程方式定义多个Spring批处理读取器/写入器,尤其是对于StepScope。 通常使用注释@StepScope等定义阅读器,但这不是我的场景。 原样: 但我有很多工作(与它的读者和作者一起)需要定义(~ 20),而且可能会达到。。。一般来说,我不会为我必须提供的每个新工作/读写器修改代码。 所以,这个想法,未来(伪代码): 下面是构建阅读器和写入器的常见方法,这些方法在AS-IS
问题内容: 在Python中,我刚刚阅读了一个文本文件中的一行,并且我想知道如何编写代码以忽略该行开头带有#的注释。 我认为应该是这样的: 但是我是Python的新手,我不知道语法 问题答案: 您可以使用startswith() 例如
问题内容: 好的,所以我正在使用该模块将我的文件从angular上传到my : 这被发送到以下功能: 现在,我的目标是读取文件,然后将每一行添加到数据库中。 但是我不太确定我如何从我的服务器中读取文件并调试了服务器,找不到文件,但是正在从我的应用程序中调用api。 谁能向正确的方向推动我?:) 问题答案: 有几种不同的库可以解析Excel文件(.xlsx)。我将列出两个我觉得有趣并且值得研究的项目
我在用图书馆 我在努力 库,但无法将其转换为工作簿 注意:在最终结果中,我希望返回XSSFWorkbook 上面的代码会内存溢出,任何帮助都将提前感谢