2016-04-11 8 views
0

Spring batch'te baştan başlamak için bir yol olup olmadığını bilen var mı? İlk önce Adım 1, sonra Adım 2, Adım 3, ardından bir koşul karşılanana kadar Adım 1, Adım 2, Aşama 3, vb. Googling'i denedim ama herhangi bir somut örneği bitiremedim. Bugüne kadarYay kepçesi - İlk adımdan tekrar Çalıştırın

Kodu:

@Bean 
Job job(JobBuilderFactory factory) { 
    return factory.get(JOB_NAME) 
      .start(stagingStep) 
      .next(analyzeStep) 
      .next(reportingStep) 

      .preventRestart() 
      .build(); 
} 
+0

Yani olmak iş istiyorum sürekli. Görev zamanlayıcıyı (ilkbahar 3'ü) kullanabilir ve cron komutlarını değiştirebileceğinizi veya karşılık gelen yöntemle tetikleyebileceğinizi düşünüyorum. Bu yöntemde tetiklemeyi durdurmak için bazı koşullara sahip olabilirsiniz. – surya

+0

Parti sürekli çalışmayacak. İş, bir dinleyicide bazı tanımlar yükler ve Adım 1, 2 ve 3 bir tanımı işler, sonra Adım1'e geri dönmeli ve bir sonraki işlemi gerçekleştirmelidir – LG87

cevap

1

Bu çeşitli şekillerde yapılabilir düşünüyorum ..

1.Intercept söz here

<job id="footballJob"> 
<step id="playerload"   parent="s1" next="gameLoad"/> 
<step id="gameLoad"   parent="s2" next="playerSummarization"/> 
<step id="playerSummarization" parent="s3"/> 
<listeners> 
    <listener ref="sampleListener"/> 
</listeners> 

olarak bir iş. ve listerini uygula ..

public interface JobExecutionListener { 

void beforeJob(JobExecution jobExecution); 

void afterJob(JobExecution jobExecution); // implement and call the job again 
} 

2.Implement kendi tetik/zamanlayıcı ...

<task:scheduled ref="runScheduler" method="run" trigger="mytrigger" />

<bean id="runScheduler" class="com.spring.scheduler.MyScheduler" > 
    <property name="jobLauncher" ref="jobLauncher" /> 
    <property name="job" ref="helloWorldJob" /> 
</bean> 

..

<task:scheduled-tasks> 
<!--task:scheduled ref="runScheduler" method="run" fixed-delay="5000" /> --> 

<task:scheduled ref="runScheduler" method="run" cron="*/5 * * * * *" /> 
</task:scheduled-tasks> 

Kendi tetiği kullanmak ve yukarıda atıfta geçebilir ...

<bean id="mytrigger" class="com.spring.scheduler.MyTrigger" /> 

public class MyScheduler { 

@Autowired 
private JobLauncher jobLauncher; 

@Autowired 
private Job job; 

public void run() { 
    try { 
     JobParameters param = new JobParametersBuilder().toJobParameters(); 
     String dateParam = new Date().toString(); 
     JobExecution execution = jobLauncher.run(job, param); 
     System.out.println("Exit Status in scheduler: " + execution.getStatus()); 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

ve sonra bir tetikleyici tek tekrar tekrar, yeniden gereken tasklet 3.If

public class MyTrigger implements Trigger{ 
@Override 
public Date nextExecutionTime(TriggerContext triggerContext) {...return date;} 

oluşturabilir gerekirse onun kolay, sadece RepeatStatus.CONTINUABLE tekrar tekrar yeniden bu görevi iade .. .

public RepeatStatus execute(StepContribution contribution, 
ChunkContext chunkContext)throws Exception 
{ 
    return RepeatStatus.CONTINUABLE;//RepeatStatus.FINISHED; 
} 

ve ayrıca yapılabilir bazı özel adımı istiyorsanız (adım 1 veya 2 manipüle ve yeniden çalıştıran bir job..before inşa etmek belirli adımları kullanın)

+0

Yanıtınız için teşekkürler, ancak yalnızca adımları çalıştırmak mümkün olabilir mi? İş, tekrar çalışmak istemediğim bazı dinleyicilere sahiptir. – LG87

+0

Cevabımı güncelledim (step3), umarım – surya

+0

yardımcı olur umarım tekrar yazdım, böylece parti işi yeniden başlatabilir. Cevabınız için teşekkürler :) RepeatStatus şeyi şimdi kullanma – LG87

İlgili konular