Quartz - Encerrar job após 30 minutos

Tenho um job que é chamado a cada minuto.

Configurei o quartz para rodar apenas 1 thread de cada vez, sendo que tenho apenas este job agendado.

Alguém saberia me dizer se conhece alguma maneira de verificar o tempo de execução de um job, e caso ele ultrapasse determinado tempo, eu possa matar o job possibilitando que o scheduler siga o fluxo?

Obrigado

Talvez quando for comecar a execucao se voce quandar o tempo em milisegundos em uma varivel, ai entaum depois vc pega deno o tempo e e ve a diferenca do tempo guardado no inicio da execuccao da tarefa e o tempo atual e se der o tempo de 30 minutos ou mais voce mata a tarefa

http://www.quartz-scheduler.org/api/2.0.0/org/quartz/InterruptableJob.html

A solução que consegui foi essa.
Não tenho experiência com o quartz para saber se é a melhor maneira de fazer isso, quando vc baixa o quartz existem alguns exemplos, sendo que o exemplo 7 mostra como interromper um job.

O exemplo não atendia à minha necessidade.

No contexto que realizei este teste, ao iniciar o tomcat o scheduler é iniciado e a trigger é disparada uma vez por minuto.
No exemplo, o job para com 30 segundos de execução.
Depois disso, um novo job é executado.

Isso que eu precisava, matar um job que estivesse rodando mais que 30 minutos, liberando o espaço para que um novo job realizasse o processo.

Configurei o quartz para rodar uma thread por vez no quartz.properties e coloquei a anotação @DisallowConcurrentExecution.

Meu projeto só roda este agendamento do quartz.


@DisallowConcurrentExecution
public class TesteJob implements InterruptableJob {
	private boolean interrupted = false;
	private final int TIME_IN_MILLIS = 30000; //30 segundos
	
	
	private void imprimirHorario() {
		Date date = new Date(); 
		
                DateFormat formato = new SimpleDateFormat("HH:mm:ss.SSS");  
                String formattedDate = formato.format(date);  
    
                System.out.println(formattedDate);
	}
	
	public void execute(JobExecutionContext arg0) throws JobExecutionException {
		long init;
		long now;
		long tempo;
    
		try {
			Thread t = new Thread("teste") {
                        @Override
                        public void run() {
        	              try {
        		             while(true){
        			           imprimirHorario();
        			           Thread.sleep(1000);
        			
        		                   if(interrupted){
        				        System.out.println("*******************************************************************");
        				        this.interrupt();
        			           }
        				
        		            }
        	             }catch(InterruptedException ie){
        		           //log - Job interrompido
			     } catch (Exception e) {
			          e.printStackTrace();
			     }
                  }};
			
		init = System.currentTimeMillis();  
			
		t.start();
			 
                while (!interrupted && t.isAlive()) {
                     try {
                         t.join(1000L);
              
                         now = System.currentTimeMillis();  
                         tempo = now - init;
              
                         if(tempo > TIME_IN_MILLIS)
              	         interrupt();
              
                      } catch (InterruptedException e) {
                          break;
		      } catch (Exception e) {
			throw new RuntimeException(e);
		      }
	       }
       }

	@Override
	public void interrupt() throws UnableToInterruptJobException {
		this.interrupted = true;
	}