Cómo configurar la multitarea en Quartz
Uso de Quartz para lograr una carga dinámica multitarea
La segunda fase del sistema de informes de Hudson ha finalizado. Esta vez, se ha agregado una nueva función de personalización de correo electrónico. esta función reside en la estructura de cuarzo.
Qué es Quartz
Quartz es un marco de programación de tareas escrito en Java. ¿Qué es la programación de tareas? Por ejemplo: por ejemplo, necesitamos publicar un informe semanal a las tres en punto. Todos los jueves por la tarde Necesitamos un sistema que nos recuerde que debemos enviar un informe semanal a las 2:30 p. m. Este recordatorio es una tarea. Esta tarea se activa automáticamente todos los jueves a las 2:30 p. m. programación de este sistema. Quartz nos brinda la capacidad de programar regularmente tareas definidas. Si comprende la configuración de las expresiones cronExpression en el plan de programación de Quartz, se maravillará de la flexibilidad y el poder de Quartz.
Quartz se usa ampliamente para el sistema de informes de Hudson, solo proporciona un fuerte soporte para la función de personalización del correo electrónico.
Uso simple de Quartz
Quartz también se usó en la primera fase del sistema de informes de Hudson, pero en ese momento la información de programación de tareas estaba codificada en el archivo de configuración Every. Cuando se inicia el sistema, todas las configuraciones de programación se cargan en la memoria y no se implementa la carga dinámica de multitarea. Primero usemos esto para explicar el uso básico del cuarzo. El sistema de informes de Hudson utiliza la estructura de resorte para integrar el cuarzo, por lo que solo se introduce el uso integrado de resorte y cuarzo.
La siguiente figura muestra la configuración de Quartz en el archivo de configuración de Spring:
De hecho, hay tres partes principales en el uso de Quartz: un programador y una tarea a programar. JobDetail y un disparador explican la configuración anterior, de abajo hacia arriba en la figura:
1. Configurar un trabajo es la clase de tarea que queremos programar.
2. Configure jobDetail, jobDetail necesita cargar la clase de implementación del trabajo y especificar el método de destino, es decir, el método que debe ejecutarse para completar la tarea, como ejecutar en este método, definimos la tarea que queremos. do. El método de ejecución debe implementarse en la clase de trabajo.
3. Configurar el disparador, que se utiliza para activar las tareas que definimos. En la configuración del disparador, necesitamos cargar el detalle del trabajo de la tarea que debe programarse. hora que necesitamos activar y la hora de activación. Configurada en la expresión cronExperssion, esta expresión es muy flexible y poderosa. Por ejemplo: necesitamos activar una tarea cada media hora entre las 8 am y las 8 pm todos los días hábiles. expresión como :0 0/30 8-20 ? *LUN-VIE. Para obtener una explicación detallada de esta expresión, puede iniciar sesión en el sistema de informes de Hudson (enlace: http://10.232.29.21:8080/hudson-report/) y hacer clic en "Ayuda para la configuración del plan de tiempo de envío de correo electrónico" en el mantenimiento de la información del correo electrónico para vista.
4. Para configurar el programador, solo necesita cargar el disparador. Puede configurar múltiples disparadores bajo la etiqueta de lista. Tenga en cuenta que hay una configuración lazy-init = false en la configuración del programador, lo que indica que tan pronto como comience nuestra primavera, el programador de Quartz también se iniciará. De lo contrario, si su valor es verdadero, Quartz no podrá funcionar debido a la pereza. cargando Función, el valor predeterminado de este elemento es falso.
En este punto, nuestra configuración ha sido escrita y solo necesitamos implementar la clase de trabajo con el método de ejecución.
Este método también puede implementar la programación de tareas múltiples. El método específico es: cada vez que agregamos una nueva programación, necesitamos agregar más configuraciones relacionadas con la programación al archivo de configuración, lo que obviamente es muy problemático.
Carga dinámica multitarea de Quartz
Primero demos una breve explicación:
La carga dinámica de múltiples tareas significa: ya hay elementos activables en el programador actual En el caso de las tareas, debemos agregar una nueva tarea y cargarla en el programador inmediatamente, esperando que se active. Para lograr tal función, el método anterior obviamente no se puede lograr, y necesitamos hacer que el estado de nuestra tarea sea persistente, es decir, cada vez que se reinicia Quartz, las tareas que teníamos antes de reiniciar se cargan automáticamente. Guardar las tareas en la memoria obviamente no se puede. lograr este propósito. ¿Qué hacer? Agregue soporte de base de datos para guardar información en tablas de datos.
La documentación oficial de Quartz proporciona archivos sql (en el directorio /docs/dbTables) para crear tablas de datos en varios tipos de bases de datos. Cuando usamos la base de datos MySQL, podemos elegir el archivo table_mysql_innodb.sql. Lo que hay que tener en cuenta aquí es la codificación. Quartz usa la codificación latin1 de forma predeterminada. Generalmente usamos la codificación urf-8 o gbk. Al crear una tabla, se le indicará que hay campos demasiado largos en la tabla. cambiar la codificacion? Pero necesitamos caracteres chinos, por lo que podemos cambiar la longitud del campo demasiado larga a la longitud admitida. No se han encontrado efectos secundarios en esta etapa.
La tabla de datos creada es como se muestra a continuación:
***Doce tablas, explicadas de arriba a abajo:
qrtz_blob_triggers:
qrtz_calendars: almacena información del calendario. Quartz puede configurar un calendario para especificar un rango de tiempo.
qrtz_cron_triggers: almacena activadores de tipo cron
qrtz_fired_triggers: almacena activadores activados
qrtz_job_details: almacena una información detallada del trabajo
qrtz_job_listeners: escucha de trabajos
qrtz_locks:
qrtz_paused_trigger_graps: almacena disparadores pausados
qrtz_scheduler_state: estado del programador
qrtz_simple_triggers: información sobre disparadores simples
qrtz_trigger_listeners: Oyentes de activación
qrtz_triggers: Información básica sobre los activadores
Hay tres formas de configurar el tiempo de activación de Quartz:
Método cron: use la expresión cronExpression para configurar el tiempo;
método simple, similar a JavaTimer, puede especificar una hora de inicio y finalización más un tiempo de ciclo.
el modo de calendario se puede usar junto con cron. Expresión cron para especificar una regla de tiempo de activación y calendario para especificar un rango.
Usamos el método cron y las tablas de datos que necesitamos usar son principalmente: qrtz_triggers, qrtz_cron_triggers, qrtz_fired_triggers, qrtz_job_details.
Comencemos aquí para hablar sobre cómo implementar nuestra carga dinámica multitarea.
De hecho, si queremos implementar nuestra programación dinámica multitarea, no necesitamos conocer estas tablas en absoluto. Todo lo que tenemos que hacer es implementar una clase de trabajo para realizar tareas. cree un nuevo detalle de trabajo, configure los parámetros, cree un nuevo activador y configure Simplemente agregue los parámetros al programador juntos. El proceso específico es el siguiente:
1. Cree una tabla de datos y configure la conexión de la base de datos.
2. Configure la programación en el archivo de configuración de Spring:
El origen de datos está configurado para ser una conexión de base de datos y el threadCount está configurado para permitir que se activen 5 tareas al mismo tiempo. time.
startupDelay configura el retraso después de activar el inicio. Para obtener información detallada sobre estas configuraciones, puede leer el documento de ayuda oficial de quartz para obtener más información.
3. Establezca una interfaz ScheduleService y su clase de implementación ScheduleServiceImpl para proporcionar servicios de programación.
Aquí está el método de ScheduleJob como ejemplo. Tomamos nuestra tarea de correo electrónico como ejemplo. Pase un objeto de registro de correo electrónico. Este objeto tiene identificación, nombre, destinatario, persona copia, asunto y una expresión cronExpression para el envío programado. Consulte la implementación específica:
Arriba en el método, cuando queramos. Para agregar una nueva tarea de correo electrónico, obtenemos el objeto de información de correo electrónico, primero creamos un nuevo objeto JobDetail y configuramos los parámetros. El método setName puede especificar un nombre para el objeto jobDetail. Esperamos que un objeto de información de correo electrónico corresponda a un jobDetail. entonces pase la identificación del objeto de información de correo electrónico. De lo contrario, si el nombre de jobDetail es el mismo al agregar tareas dos veces, este último sobrescribirá los datos del primero, lo que invalidará el primero. JopDataMap puede almacenar los parámetros comerciales que necesitamos pasar. Los parámetros de la información del correo electrónico se almacenan en el objeto de información del correo electrónico, por lo que pasamos el objeto completo. Lo más importante es el método setJobClass, que establece la clase para manejar nuestro. Tareas, de modo que una vez activada la tarea, Quartz sepa dónde ir para realizar la tarea. Finalmente agregue esta tarea al programador.
Luego cree un nuevo objeto CronTrigger. Al construir el objeto, pase el nombre y el grupo del activador, el nombre y el grupo de jobDetail, y configure la expresión cronExpression para que el activador presione esta expresión. se activa el plan. Cabe señalar que un jobDetail puede corresponder a varios activadores, siempre que los nombres de los activadores se establezcan de manera diferente durante la construcción y los nombres de jobDetail sean los mismos, se pueden crear diferentes activadores para el mismo jobDetail. Y para el activador, también puede configurar jobDataMap para guardar los parámetros comerciales necesarios cuando se activa este activador.
Finalmente, el método SchedulerJob agrega el disparador al programador y espera el disparador.