2013-08-22 80 views
2

我有一個基礎工作,只需一個基本步驟。這項工作每x秒執行一次(我正在使用石英)。然後在我的配置類中,我也有變量「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> 

回答

8

使用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" /> 

,並通過runStepJobParameter

希望可以幫助解決您的問題。

+0

是的,它工作thx很多。只是一個提醒。 FlowExecutionStatus需要作爲參數字符串而不是布爾型 – hudi

+0

你說得對,我在飛行中編寫代碼。我的錯。 –

+1

謝謝。它通過將 HaMi