【问题标题】:spring batch job parameters to recurring operation春季批处理作业参数以重复操作
【发布时间】:2014-01-27 09:48:29
【问题描述】:

我有一个基本的 spring 批处理作业 (spring-core-3.1.1) 应用程序设置,使用石英调度程序 (1.8.6) 运行。它看起来像这样,

     - spring batch job has a mysql datasource to save job states in spring batch schema 
     - job Reader is a csvFile reader using class org.springframework.batch.item.file.FlatFileItemReader
     - Writer is simple custom ItemWriter (output is on console)
     - quartz scheduler is used to setup crontrigger alongwith jobdetail bean
     - scheudler runs the job every 10 seconds (*/10 * * * * ?)

我想通过读取 CSV 文件来自定义此设置,每个作业实例仅读取 X 行,而不是读取整个文件,例如如果文件中有 10 行,并且我想每步读取 2 行,那么作业实例应该只读取 2 行而不是 10 行。为此,我想根据读取的行数为作业提供动态参数。这样对于每个作业执行,作业实例都具有唯一且递增的参数。就像文件阅读器的光标一样。

如何实现?

参数的我的 jobdetail 属性

  <property name="jobDataAsMap">
        <map>
            <entry key="jobName" value="reportJob" />
            <entry key="jobLocator" value-ref="jobRegistry" />
            <entry key="jobLauncher" value-ref="jobLauncher" />
            <entry key="cursor" value="0"/> 
                <!-- Gives error on this one: <entry key="cursor" value="#{jobParameters['cursor']}"/>
        </map>
    </property>

【问题讨论】:

    标签: spring spring-mvc parameters quartz-scheduler spring-batch


    【解决方案1】:

    您可以读取最新成功完成的作业参数以检测最新的起始行,然后将此值加 2 并调用新作业。
    您可以使用JobExplorer读取作业表元数据或直接查询spring-batch的meta-data tables

    【讨论】:

    • 您的意思是,我必须在每次作业执行时手动读取 2 行,并且每次更新 JobParamers,例如 builder.addDouble("cursor", x+2); ?
    • 是的。每个新工作都以基于上一个工作的更新“光标”参数开始
    • 如何将作业参数发送到石英启动器,以便它始终获得递增的参数值。我在石英 getJobParametersFromJobMap() 中增加它,但它总是读取 0
    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    相关资源
    最近更新 更多