Defini o agendador pra executar a cada 5 segundos, cada vez q ele executa era pra ele exibir uma posição diferente do array por exemplo na primeira vez a posição 0, na segunda a posição 1 e por assim vai…
segue os codigos
Agendador
public class Agendador {
public static final String NOME_JOB = "job";
public static void agendar(){
try {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
if(scheduler.getJobDetail(NOME_JOB, Scheduler.DEFAULT_GROUP) == null){
JobDetail jobDetail = new JobDetail(NOME_JOB, Scheduler.DEFAULT_GROUP, Tarefa.class);
jobDetail.getJobDataMap().put("position", 0);
Trigger trigger = TriggerUtils.makeSecondlyTrigger(5);
trigger.setName(NOME_JOB);
trigger.setStartTime(new Date());
scheduler.scheduleJob(jobDetail, trigger);
scheduler.start();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Tarefa
public class Tarefa implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
JobDataMap dataMap = context.getJobDetail().getJobDataMap();
Integer parametro = (Integer) dataMap.get("position");
int[] lista = {1, 2, 3, 4, 5};
System.out.println("Parametro " + lista[parametro]);
}
}
mas qndo coloco dentro do for ele executa tudo de uma vez e eu só quero q na primeira vez q chamar o trigger ele mostre a primeira posição, na segunda vez a segunda posição e assim por diante…
a questão é que o quartz, a cada execucao é uma nova thread e ele executa como uma nova chamada e de fato ele vai ler a posicao 0, pois é como se fosse um novo request para o quartz. qdo um job termina ele nao sabe que outro rodou, mas se vc olhar na api vc pode criar jobs que se comunicam e dai vc vai saber que o job1 rodou o que tava na posicao 0 e ficou aguardando um novo ok, para continuar, dar uma olhada na documentacao, ela eh uma das melhores.
Na Sexta mesmo eu consegui resolver… foi isso mesmo que o LPJava falou, eu criei diferentes jobs paras as ações que eu queria e funcionou perfeitamente, não sei se é a maneira mais adequada… mas resolveu meu problema…