spring - 如何避免 DelimitedLineTokenizer 名称中的硬编码名称?

标签 spring spring-batch

我正在使用 DelimitedLineTokenizer 使用 FlatFileItemReader 读取 txt 文件。但是,有没有办法避免对字段的“名称”属性进行硬编码?我们可以使用任何 bean 吗?

<bean id="employeeReader" class="org.springframework.batch.item.file.FlatFileItemReader"
    scope="step">
    <property name="resource" value="#{jobParameters['input.file.name']}" />
    <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="empId,empName,empAge" />
                </bean>
            </property>
            <property name="fieldSetMapper">
                <bean
                    class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                    <property name="targetType" value="com.example.Employee" />
                </bean>
            </property>
        </bean>
    </property>
</bean>

最佳答案

目前还没有,因为LineTokenizer的工作结果是一个FieldSetFieldSet 就像文件的 ResultSet 一样。因此,就像在 ResultSet 中一样,我们需要通过名称来引用每个“列”。 LineTokenizer 无法洞察数据的最终位置(对象是什么样子),因此我们无法对其进行内省(introspection)。如果您想采用更动态的方法,则需要实现自己的 LineMapper,它将两个函数组合在一起,以允许这种类型的内省(introspection)。

一如既往,拉取请求受到赞赏!

关于spring - 如何避免 DelimitedLineTokenizer 名称中的硬编码名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32994242/

相关文章:

java - 如何将 xml 配置 bean 转换为 Java 配置 bean?

java - 将 StaxEventItemReader 与 jaxb2 unmarshaller 结合使用

java - Spring批处理聚合值并写入单个值

java - Java 8时间包的Spring Batch序列化问题

Spring Batch - 读取大型平面文件 - 水平缩放的选择?

java - SQS 接收器 - Spring Boot

java - 如何动态构造查询以过滤Spring JPA中的结果?

spring - 如何将 Spring Cloud 与 logback 集成?

spring - 添加 Actuator 作为 groupedOpenApi

java - 使用 Spring Batch 将文件中的日期解析为 LocalDateTime