我正在开发一个Spring Batch项目,这是我的Reader的配置。
<bean id="personneReaderCSV" class="org.springframework.batch.item.file.FlatFileItemReader" >
<property name="resource" value="input/personne.txt" />
<property name="lineMapper">
<bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
<property name="lineTokenizer">
<bean class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
<property name="delimiter" value=","/>
<property name="names" value="id,nom,prenom,civilite" />
</bean>
</property>
<property name="fieldSetMapper">
<bean class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
<property name="targetType" value="ma.ensa.Personne" />
</bean>
</property>
</bean>
</property>
</bean>
现在我想使用一个文件Upload with JSF来选择我想要读取数据的文件,所以我怎么做才能使属性资源的值动态化。 帮助和感谢。
答案 0 :(得分:0)
您可能希望通过在作业的JobParameters
中设置属性,然后以这种方式将其注入读者bean来参数化作业中的输入文件名:
<bean id="personneReaderCSV" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
<property name="resource" value="#{jobParameters[filename]}" />
<!-- ... -->
</bean>
请注意,您还应该向您的bean添加scope="step"
。
这称为后期绑定,并在官方spring-batch文档的§5.4中进行了说明。
答案 1 :(得分:0)
Spring Boot更新:
@Bean
@StepScope
public FlatFileItemReader<CarInfo> itemReader(@Value("#{jobParameters['fileName']}") String fileLocation) {
FlatFileItemReader<CarInfo> flatFileItemReader = new FlatFileItemReader<>();
flatFileItemReader.setResource(new FileSystemResource(fileLocation));
flatFileItemReader.setName("CSV-Reader");
flatFileItemReader.setLinesToSkip(1);
flatFileItemReader.setLineMapper(lineMapper());
return flatFileItemReader;
}
我希望您可以将Multipart文件保存到资源文件夹中并作为资源共享,或者找到一种将其作为资源对象传递到参数列表的方法。然后将其注入上面显示的