【问题标题】:Spring Batch And File UploadSpring批量和文件上传
【发布时间】:2015-01-23 19:08:02
【问题描述】:

我正在做一个 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>

现在我想使用带有 JSF 的文件上传来选择我想要从中读取数据的文件,那么我该如何做才能使属性资源的值动态化。 帮助和感谢。

【问题讨论】:

    标签: jsf file-upload spring-batch


    【解决方案1】:

    您可能希望通过在作业的JobParameters 中设置一个属性来参数化作业中的输入文件名,然后以这种方式将其注入您的阅读器 bean:

    <bean id="personneReaderCSV" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
       <property name="resource" value="#{jobParameters[filename]}" />
       <!-- ... -->
    </bean>
    

    请注意,您还应该将 scope="step" 添加到您的 bean。

    这称为后期绑定,在 spring-batch 官方文档的§5.4 中有说明。

    【讨论】:

    • 感谢您改进我的问题。我没有注意错误。另外,英语不是我的母语。
    • 我的问题是文件名改了。因为我正在使用托管 Bean。不知道你是否理解我的问题。
    • 我不是 JSF 方面的专家...您能否详细说明“文件已更改”是什么意思?一旦确定文件名不再更改,就不能执行工作吗?
    【解决方案2】:

    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;
    }
    

    我希望您可以将 Multipartfile 保存到资源文件夹中并将其作为资源共享,或者找到一种方法将其作为资源对象传递给参数列表。然后在这里注入如上所示

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多