Temporizador (Cuarzo I)
Desventajas: no admite la distribución (solo se puede ejecutar una tarea en un servidor y no se puede fragmentar)
Dividir una tarea Se divide en varios elementos de tarea independientes y el servidor distribuido ejecuta un elemento o varios fragmentos respectivamente. Las tareas tradicionales del temporizador se ejecutan en un solo servidor. Si la cantidad de datos es grande, la presión será grande.
Ejemplo: Procesamiento de un millón de pedidos: el servidor A procesa pedidos con números pares y el servidor B procesa pedidos con números impares.
Integrar proyectos java
1. Introducir dependencias de quartz
2. quartz.properties
3.
Nota:
1. La ejecución de cada trabajo es un nuevo hilo (incluso si es la misma tarea, este trabajo elástico es diferente, pero si el hilo configurado en el archivo de configuración quartz.properties es). consumido, seguirá bloqueado. Prediga el tamaño del grupo de subprocesos según el negocio. (Entonces la tarea**** comparte el grupo de subprocesos)
2. Cada vez que se ejecuta un trabajo, se creará un nuevo objeto de trabajo, por lo que no es factible pasar información a través del miembro. variables del trabajo (se inicializará cada vez)
3. La clase myJob debe tener un método constructor vacío
1. Método 1: Pase JobDataMap al crear jobDetail, y luego obtenga JobDataMap a través de JobExecutionContext
2. Método 2: definir variables miembro en myjob y generar métodos get y set
Arriba, sabemos que las tareas se procesan al mismo tiempo, por lo que debemos considerar la seguridad de concurrencia .
1. Utilice @DisallowConcurrentExecution
Utilice la anotación @PersistJobDataAfterExecution y el método jobDataMap.put
1. Atributo startTime: establezca la hora en la que se inicia el disparador por primera vez
2. Atributo endTime: indica el momento en el que expira el disparador
3. Prioridad: cuando se ejecutan varios disparadores al mismo tiempo, pero no hay suficientes subprocesos para activarlos , la prioridad será Dar el disparador con el nivel de ejecución más alto
TriggerBuilder().withPriority(10);
El valor predeterminado es 5, cuanto mayor sea el número, mayor. la prioridad
4. Activación falsa (instrucciones de activación falsas)
1. estrategia withMisfireHandling, withMisfireHandlingInstructionDoNothing: no activar, esperar el siguiente momento de activación
Establecer para ejecutarse cada 5 segundos, la tarea es de 7 segundos.
Descubrimos que esto no tiene efecto porque internamente determina si el tiempo perdido es mayor que el valor de misfireThreshold (el valor predeterminado es 5 segundos), y si es menor que eso, aún así se ejecutará inmediatamente. . Aquí solo tenemos un fallo de 2 segundos, menos de 5 segundos.
Establezca el valor de misfireThreshold a través de quartz.properties
Ejecútelo nuevamente y descubra que la política withMisfireHandlingInstructionDoNothing ha entrado en vigor.
2. Estrategia withMisfireHandlingInstructionFireAndProceed: omisión de ejecución inmediata
5. Calendario
1. Se puede ejecutar una vez en un momento específico
2. Se puede ejecutar varias veces según el intervalo de tiempo especificado
1. Utilice la expresión cron para activar
, que representa y, si es 10, 20, ¿10 segundos y 20 segundos apuntan a
? Solo pueden aparecer la fecha y la semana y no representan valores específicos. Si * se usa para representar la semana, habrá ambigüedad. ¿Es este el uso?
L solo puede aparecer en fecha y semana, representando el último día de cada mes, o sábado
W Sólo puede aparecer en fechas, representando el día laborable más cercano a esta fecha