la entrada de cuarzo (a) Administración del trabajo

parte 1.Job

Trabajo en realidad formada por tres partes:
  JobDetail: Este trabajo se utiliza para describir lo que debe hacer
  para alcanzar las categorías de trabajo: trabajo específico de
  JobDataMap: proporcionar parámetros para el empleo

 

Además de manera usingJobData JobDataMap, también puede haber otras maneras

 

 concurrente 2.Job

  De manera predeterminada, independientemente de la última vez que la tarea se ha completado o terminado, siempre que el tiempo especificado se ha terminado, entonces la siguiente hora de inicio.
  A veces mucho tiempo para hacer las tareas, tales como copia de seguridad de base de datos, esta vez después de una copia de seguridad en la conclusión con éxito de la esperanza, comenzó de inmediato a una copia de seguridad, hasta el tiempo especificado, no se puede iniciar, ya que esto puede causar la base de datos está bloqueado (varios hilos al mismo tiempo la base de datos de copia de seguridad, provocando el caos impredecible).

Así pues, en este caso, la tarea de copia de seguridad de base de datos para añadir un comentario como:

@DisallowConcurrentExecution

 

 

3.Job anormal

  Tarea pasó anomalías son muy comunes. enfoque anormal generalmente de dos maneras:
    1. Cuando se produce una excepción, a continuación, observe toda esta gestión planificación de tareas, que pare su funcionamiento
    2. Cuando se produce una excepción, modificar los parámetros e inmediatamente volver a ejecutar

público  de clase ExceptionJob1 los implementos del empleo { 
    @ Override 
    pública  vacío Ejecutar (el JobExecutionContext JobExecutionContext) lanza JobExecutionException {
         int i = 0 ;
         el try {
             // anomalía se produce deliberadamente 
            System.out.println (100 / I); 
        } la captura (Exception e) { 
            el sistema. out.println ( "excepción se produce, cancelar todas programada correspondiente al Trabajo" ); 
            JobExecutionException JE = nueva nueva JobExecutionException (E); 
            JE. setUnscheduleAllTriggers( Verdadero );
            tirar je; 
        } 
    } 

}
público  de clase ExceptionJob2 los implementos del empleo {
     static  int i = 0 ; 
    @Override 
    pública  vacío Ejecutar (el JobExecutionContext JobExecutionContext) lanza JobExecutionException {
         try {
             // anomalía se produce deliberadamente 
            System.out.println ( "resultado del cálculo" 100 + / I); 
        } la captura ( E excepción) { 
            System.out.println ( "excepción se produce, modificar los parámetros, inmediatamente volver a ejecutar" ); 
            I = 1. ; 
            JobExecutionException JE = new newJobExecutionException (E); 
            . JE setRefireImmediately ( true );       // ejecutar el trabajo inmediatamente re
             de banda JE; 
        } 
    } 
}
público  de clase ExceptionTest {
     públicas  estáticas  void main (String [] args) lanza la excepción { 
        exceptionHandle1 (); 
        exceptionHandle2 (); 
    } 
    Privada  estática  vacío exceptionHandle1 () lanza la excepción { 
        programador programador = StdSchedulerFactory.getDefaultScheduler (); 

        Gatillo de disparo = newTrigger (). WithIdentity ( "trigger1", "grupo 1" ) 
                .startNow () 
                .withSchedule (simpleSchedule () 
                        .withIntervalInSeconds ( 2 )
                        .withRepeatCount ( 10 )) 
                .build (); 

        // definir una la JobDetail 
        newJob la JobDetail Trabajo = (ExceptionJob1. clase ) 
                .withIdentity ( "exceptionJob1", "someJobGroup" ) 
                .build (); 

        // programado para unirse al empleo 
        scheduler.scheduleJob (trabajo, Trigger); 

        // iniciar 
        scheduler.start (); 

        // después de esperar 20 segundos, por lo que las tareas anteriores se llevan a cabo durante y después de cerca planificador 
        del Thread.sleep (20000 ); 
        scheduler.shutdown ( true ); 
    } 
privada estática vacío exceptionHandle2 ()lanza excepción { Scheduler planificador = StdSchedulerFactory.getDefaultScheduler (); Gatillo de disparo = newTrigger () withIdentity ( "trigger1", "grupo 1". ) .StartNow () .withSchedule (simpleSchedule () .withIntervalInSeconds ( 2 ) .withRepeatCount ( 10 )) .build (); // 定义一个JobDetail JobDetail trabajo = newJob (ExceptionJob2. Clase ) .withIdentity ( "exceptionJob1", "someJobGroup" ) .build (); // despacho para unirse al empleo scheduler.scheduleJob (el trabajo, el gatillo); // iniciar scheduler.start (); // esperar 20 segundos, por lo que la tarea por delante después de realizar todas partes, a continuación, cierre el programador Thread.sleep (20000 ); scheduler.shutdown ( true ); } }

 

 

 

4. Interrupción de empleo

  En los negocios, a veces es necesario interrumpir la tarea, entonces la necesidad de aplicar el Trabajo InterruptableJob la interfaz, y luego se interrumpió con facilidad

público  de clase StoppableJob implementos InterruptableJob  { 

    privado  booleano stop = false ; 

    @ Override 
    pública  nula  interrupción () lanza UnableToInterruptJobException { 
        System.out.println ( "被调度叫停" ); 
        parada = verdadero ; 
    } 

    @ Override 
    pública  vacío  ejecutar (JobExecutionContext jobExecutionContext) lanza JobExecutionException {
         tiempo ( verdadera ) { 

            si(STOP)
                 PAUSA ;
             el try { 
                System.out.println ( "cada segundo, una vez detectados, para ver si la parada" ); 
                el Thread.sleep ( 1000 ); 
            } la captura (InterruptedException E) {
                 // el TODO Auto-Generado bloquear la captura 
                e.printStackTrace (); 
            } 
            System.out.println ( "continuar el trabajo ..." ); 
        } 
    } 

}

prueba

público  de clase Detener {
     públicas  estáticas  void main (String [] args) lanza la excepción { 
programador programador
= StdSchedulerFactory.getDefaultScheduler (); Gatillo de disparo = newTrigger () withIdentity ( "trigger1", "grupo 1". ) .StartNow () .build (); // 定义一个JobDetail JobDetail trabajo = newJob (StoppableJob. Clase ) .withIdentity ( "exceptionJob1", "someJobGroup" ) .build (); // 调度加入这个trabajo scheduler.scheduleJob (Job, Trigger); // iniciar scheduler.start (); la Thread.sleep ( 5000 ); System.out.println ( "5 segundos, parada de planificación de tareas" ); // clave es equivalente a la de empleo clave primaria scheduler.interrupt (job.getKey ()); // esperar 20 segundos, de modo que las tareas anteriores se llevan a cabo después de la expiración, el planificador a continuación, cierre la Thread.sleep (20000 ); scheduler.shutdown ( true ); } }

 

 

Supongo que te gusta

Origin www.cnblogs.com/crazy-lc/p/12512568.html
Recomendado
Clasificación