当前位置: 首页 > 知识库问答 >
问题:

Spring批处理作业csv文件读取从失败的行恢复

令狐嘉禧
2023-03-14

读者是这样的,

<bean id="cvsFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">

    <property name="resource" value="classpath:cvs/input/report.csv" />
    <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,impressions" />
                </bean>
            </property>
            <property name="fieldSetMapper">
                <bean
                    class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper">
                    <property name="prototypeBeanName" value="report" />
                </bean>
            </property>
        </bean>
    </property>

</bean>

我想要实现的是,如果在读取CSV文件时,读取器/作业失败,那么下一个计划的jobinstance应该从上次JobExecution失败的行启动读取器。我可以在CustomProcessor process()函数中跟踪计数器处理的行。

共有1个答案

弘伟彦
2023-03-14

但是知道如何从上次执行的失败状态中读取csv文件吗?

将其添加到他们保存在批处理表BATCH_JOB_EXECUTION_PARAMS中的jobParameters中。

在应用程序启动时,在batch_job_execution中查找不完整的作业,并在manualy中重新启动。

    <batch:step id="processing-step">
        <batch:tasklet>
            <batch:chunk reader="csv_reader"
                         processor="csv_processor"
                         writer="csv_writer"
                         commit-interval="5">
                <batch:retry-policy>
                    <bean class="org.springframework.retry.policy.AlwaysRetryPolicy" scope="step"/>
                </batch:retry-policy>
            </batch:chunk>
        </batch:tasklet>
    </batch:step>

Spring Batch自动处理失败的块(其中抛出异常的块)。文件。

 类似资料:
  • 我正在尝试创建一个应用程序,该应用程序使用spring-batch-excel扩展名来读取用户通过web界面上传的Excel文件,以便解析Excel文件中的地址。 当代码运行时,没有错误,但我得到的只是我日志中的以下内容。即使我的处理器和Writer中都有log/syso(它们从未被调用过,我所能想象的是它没有正确读取文件,也没有返回要处理/写入的数据)。是的,这个文件有数据,实际上有几千条记录。

  • 我有以下工作要处理在一定的时间间隔或特别的基础上。 作业中的步骤如下: 我也想要用户界面,在那里我可以触发一个特别的基础上的工作,而且我应该能够提供参数从用户界面。 我想用Spring batch来完成这个任务,但它更多的是用于读->处理->写之类的工作。这里,在第一步中,我正在生成由第二步读取的数据。我不确定我是否还可以使用Spring batch来实现这个,或者有更好的方法来实现这个。

  • 我正在创建一个Spring批处理作业,将数据从给定的CSV文件填充到数据库表中。我创建了一个定制的FlatFileItemReader。我的问题是read()方法只被调用一次,所以只有CSV文件的第一行被插入到数据库中。 myModelCsvReader 欢迎任何一致意见。感谢//扩展FlatFileItemReader后的thereader

  • 我当前正在命令行中传递文件名在spring批处理作业中的参数并运行我的作业,spring批处理作业将查找文件并读取、处理和写入该文件。我目前在读取器中的作业参数文件名和读取器文件名,如何才能在处理器和写入器中使用相同的作业参数文件名。

  • 我不知道如何使用调用Spring批处理中定义的作业,文档细节对我来说是不够的。 我遵循了Spring Batch官方指南,使用Java注释(例如)在Spring Batch中编写作业,因为我希望避免使用XML配置文件来描述作业、步骤等。 到目前为止我已经: 配置类(见下文),我使用AnnotaIon将定义、、、和(带有的所有内容放入其中。 具有方法的类,该方法具有并具有注释,以导入处理作业中的数据

  • 我最近使用。我对DB表进行了必要的更改,并对一些与参数API相关的微小代码进行了更改。 现在,当我运行应用程序时,它正在工作,但是如果一个步骤的退出状态为失败,则作业的存在状态设置为完成。这会导致一些问题,因为我们的应用程序代码将其视为成功执行。我通过在中添加一个代码片段来解决这个问题,在这里我检查列表并手动设置作业退出状态,但是Spring批处理框架不应该处理退出状态吗?