Spring批处理和文件上传

时间:2015-01-23 19:08:03

标签: jsf file-upload spring-batch

我正在开发一个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来选择我想要读取数据的文件,所以我怎么做才能使属性资源的值动态化。 帮助和感谢。

2 个答案:

答案 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文件保存到资源文件夹中并作为资源共享,或者找到一种将其作为资源对象传递到参数列表的方法。然后将其注入上面显示的