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:
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 ); } }