条件为假时如何跳过批处理步骤 [英] How to skip batch step when condition is false

查看:17
本文介绍了条件为假时如何跳过批处理步骤的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只有一个基本工作和一个基本步骤。此作业每x秒执行一次(为此,我使用Quartz)。然后在我的config类中也有变量"runStep"。仅当runStep为true时,我应该在哪里添加此属性并运行步骤?

<batch:job id="export1" parent="baseJob">
    <batch:step id="registruj" parent="baseStep">
        <tasklet>
            <chunk reader="registrujReader" processor="registrujProcessor" writer="registrujWriter"
                commit-interval="1" />
        </tasklet>
    </batch:step>
</batch:job>

<bean id="baseJob" class="org.springframework.batch.core.job.SimpleJob" abstract="true">
    <property name="jobRepository" ref="jobRepository" />
</bean>

<bean id="baseStep" class="org.springframework.batch.core.step.factory.SimpleStepFactoryBean" abstract="true">
    <property name="transactionManager" ref="transactionManager" />
    <property name="jobRepository" ref="jobRepository" />
    <property name="startLimit" value="100" />
    <property name="commitInterval" value="1" />
</bean>

<bean id="jobRepository" class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean"
    p:dataSource-ref="expDataSource" p:transactionManager-ref="transactionManager" />

<bean id="jobLauncher" class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
    <property name="jobRepository" ref="jobRepository" />
</bean>

<bean class="org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor">
    <property name="jobRegistry" ref="jobRegistry" />
</bean>

<bean id="jobRegistry" class="org.springframework.batch.core.configuration.support.MapJobRegistry" />

<bean id="registrujWriter" class="cz.isvs.reg.rob.util.export.batch.RegistrujItemWriter" scope="step" />
<bean id="registrujReader" class="cz.isvs.reg.rob.util.export.batch.RegistrujItemReader" scope="step" />
<bean id="registrujProcessor" class="cz.isvs.reg.rob.util.export.batch.RegistrujItemProcessor" scope="step" />

<!-- run every 10 seconds -->
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
            <property name="jobDetail" ref="jobDetail" />
            <property name="cronExpression" value="*/10 * * * * ?" />
        </bean>
    </property>
</bean>

<bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
    <property name="jobClass" value="cz.isvs.reg.rob.util.export.batch.JobLauncherDetails" />
    <property name="group" value="quartz-batch" />
    <property name="jobDataAsMap">
        <map>
            <entry key="jobName" value="export1" />
            <entry key="jobLocator" value-ref="jobRegistry" />
            <entry key="jobLauncher" value-ref="jobLauncher" />
        </map>
    </property>
</bean>

推荐答案

使用JobExecutionDecider

public class RunStepDecider implements JobExecutionDecider {
  public FlowExecutionStatus decide(JobExecution jobExecution, StepExecution stepExecution) {
    final String runStep = jobExecution.getJobParameters().getString("runStep");
    //Depending on the above condition you can return Completed or Failed.
    return new FlowExecutionStatus.COMPLETED;
  }
}
<batch:job id="export1" parent="baseJob">
  <decision id="decision" decider="decider">
    <next on="COMPLETED" to="registruj" />
  </decision>
  <batch:step id="registruj" parent="baseStep">
    <tasklet>
      <chunk reader="registrujReader" processor="registrujProcessor" writer="registrujWriter" commit-interval="1" />
    </tasklet>
  </batch:step>
</batch:job>


<bean id="decider" class="RunStepDecider" />

并将runStep作为JobParameter传递。

希望可以帮助您解决问题。

这篇关于条件为假时如何跳过批处理步骤的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆