Ich denke, das in vielfältiger Weise getan werden kann ..
1.Intercept der Job wie erwähnt 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>
. und implementieren Sie Ihren Lister ..
public interface JobExecutionListener {
void beforeJob(JobExecution jobExecution);
void afterJob(JobExecution jobExecution); // implement and call the job again
}
2.Umsetzung Ihre eigenen Trigger/Scheduler ...
<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>
Sie können über Ihre eigenen Trigger und übergeben Referenz verwenden ...
<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();
}
}
und dann erforderlich, wenn Sie einen Trigger
public class MyTrigger implements Trigger{
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {...return date;}
3.Falls nur schaffen kann man Tasklet wieder wieder erneut ausgeführt werden muss, ist es einfach, nur zurückkehren RepeatStatus.CONTINUABLE, diese Aufgabe immer wieder erneut ausführen ..
.
public RepeatStatus execute(StepContribution contribution,
ChunkContext chunkContext)throws Exception
{
return RepeatStatus.CONTINUABLE;//RepeatStatus.FINISHED;
}
und wenn Sie einigen konkreten Schritt mögen, die auch getan werden kann (manipulieren Schritt 1 oder 2 und konkrete Schritte verwenden, um eine job..before zu bauen wieder zum laufen)
So wollen Sie den Job zu sein kontinuierlich. Kannst du den Task-Scheduler verwenden (spring3 weiter) und ich denke, du kannst Cron-Befehle manipulieren oder du kannst innerhalb der entsprechenden Methode triggern..und du kannst eine Bedingung haben, um das Triggern in dieser Methode zu stoppen. – surya
Die Charge wird nicht kontinuierlich ausgeführt. Der Job lädt einige Definitionen in einem Listener, und Step1, 2 und 3 verarbeitet eine Definition, dann sollte es zurück zu Step1 gehen und die nächste – LG87