【问题标题】:Get file name from readMultiFileJob in Spring Batch从 Spring Batch 中的 readMultiFileJob 获取文件名
【发布时间】:2016-05-26 06:14:09
【问题描述】:

以下是我的 Spring Batch 处理配置文件,我正在读取多个文件(xml、csv 等),这些文件以时间戳为后缀动态生成,我可以读取文件的数据和处理,
现在问题是, 我想知道文件名。 处理作业时如何获取文件名。

<import resource="../config/context.xml" />
    <bean id="domain" class="com.di.pos.Domain" />
    <job id="readMultiFileJob" xmlns="http://www.springframework.org/schema/batch">
        <step id="step1">
            <tasklet>
                <chunk reader="multiResourceReader" writer="flatFileItemWriter"
                    commit-interval="1" />
            </tasklet>
        </step>
    </job>
    <bean id="multiResourceReader"
        class=" org.springframework.batch.item.file.MultiResourceItemReader">
        <property name="resources" value="file:csv/inputs/dipos-*.csv" />
        <property name="delegate" ref="flatFileItemReader" />
    </bean>
    <bean id="flatFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">
        <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="names" value="id, name" />
                    </bean>
                </property>
                <property name="fieldSetMapper">
                    <bean
                        class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                        <property name="prototypeBeanName" value="domain" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>

【问题讨论】:

标签: spring spring-data spring-integration spring-batch


【解决方案1】:
  1. 创建一个扩展 LineMapper 的自定义 Mapper。
  2. 重写 mapLine() 方法

public FileData mapLine(String line, int lineNumber) 抛出异常 { FileData fileData = new FileData();

        Resource currentResource = delegator.getCurrentResource();
        String[] fileName = currentResource.getFilename().split("/");

        //Use this to access file path
        URI fileUri = currentResource.getURI();
        return fileData;
    }

【讨论】:

    猜你喜欢
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 2020-05-03
    • 2020-02-10
    • 2019-03-23
    • 2020-02-19
    相关资源
    最近更新 更多