Saltar al contenido principal
Version: Next (5.0)

awe-108 Módulo scheduler

El módulo scheduler permite a AWE lanzar trabajos de forma planificada, ejecutar flujos de tareas e informar de los resultados. Esta página mantiene en primer plano el camino práctico: activar el módulo, crear una tarea, elegir un modo de lanzamiento y solo después pasar a la planificación avanzada, las dependencias, los servidores y los calendarios.

Ruta rápida​

  1. Añade el starter del scheduler y la configuración del módulo.
  2. Aplica los módulos de migración de base de datos necesarios.
  3. Añade las opciones de menú del scheduler.
  4. Crea una tarea con el asistente.
  5. Elige lanzamiento manual, planificado o basado en ficheros.
  6. Añade dependencias, servidores y calendarios solo cuando el flujo básico ya funcione.

Antes de empezar​

Ya deberías sentirte cómodo con:

  • la estructura base de la aplicación de awe-101
  • las queries y los maintains de awe-104

Si necesitas la matriz exhaustiva de campos del scheduler, usa las guías específicas después de este tutorial:

Paso 1: Activar el módulo scheduler​

Añade la dependencia del starter:

pom.xml
<dependency>
<groupId>com.almis.awe</groupId>
<artifactId>awe-scheduler-spring-boot-starter</artifactId>
</dependency>

Activa la entrada de la lista de módulos en el application.properties de tu aplicación generada añadiendo awe-scheduler a tu lista de módulos actual:

application.properties
# Keep the rest of the list aligned with your application.
# The required scheduler addition is awe-scheduler.
awe.application.module-list=<your-existing-modules>,awe-scheduler

Por ejemplo, las aplicaciones Angular generadas suelen partir de <your-app>,awe, mientras que las aplicaciones React generadas incluyen también awe-react. Módulos como awe-tools son opcionales y solo deben ir en esta lista cuando tu aplicación los use realmente.

Activa las migraciones de base de datos relacionadas:

application.properties
# Enable database update by Flyway
spring.flyway.enabled=true
awe.database.migration-modules=AWE,SCHEDULER,[YOUR_APP]

Añade las opciones de menú del scheduler:

private.xml or public.xml
<menu screen="home_horizontal" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://aweframework.gitlab.io/awe/docs/schemas/menu.xsd" context="screen/private/home" default-action="screen">
<option name="scheduler" label="MENU_SCHEDULER" icon="clock-o">
<option name="scheduler-management" label="MENU_SCHEDULER_MANAGEMENT" screen="scheduler-management" icon="cogs"/>
<option name="scheduler-tasks" label="MENU_SCHEDULER_TASKS" screen="scheduler-tasks" icon="tasks">
<option name="new-scheduler-task" screen="new-scheduler-task" invisible="true" />
<option name="update-scheduler-task" screen="update-scheduler-task" invisible="true" />
</option>
<option name="scheduler-servers" label="MENU_SCHEDULER_SERVERS" screen="scheduler-server" icon="server">
<option name="new-scheduler-server" screen="new-scheduler-server" invisible="true" />
<option name="update-scheduler-server" screen="update-scheduler-server" invisible="true" />
</option>
<option name="scheduler-calendars" label="MENU_SCHEDULER_CALENDARS" screen="scheduler-calendars" icon="calendar">
<option name="new-scheduler-calendar" screen="new-scheduler-calendar" invisible="true" />
<option name="update-scheduler-calendar" screen="update-scheduler-calendar" invisible="true" />
</option>
</option>
</menu>

Propiedades opcionales del scheduler​

Si necesitas cambiar el comportamiento en ejecución, sobrescribe las propiedades del scheduler en tu configuración.

#################################################
# Scheduler properties
#################################################
awe.scheduler.tasks-load-on-start=true
awe.scheduler.stored-executions=5

#################################################
# Scheduler thread pool properties
#################################################
awe.scheduler.task-pool.size=20
awe.scheduler.task-pool.max-size=50
awe.scheduler.task-pool.queue-size=1000
awe.scheduler.task-pool.termination=120s

#################################################
# Scheduler log
#################################################
awe.scheduler.execution-log-path=/var/log/my-app/scheduler

#################################################
# Scheduler reporting
#################################################
awe.scheduler.report-email-from-value=scheduler@almis.com

Si activas la ejecución en clúster, todas las instancias participantes deben coordinarse a través del datasource configurado.

note

No ejecutes una planificación en clúster entre máquinas con relojes sin sincronizar. La coordinación basada en Quartz depende de que la hora sea lo bastante coherente entre los nodos participantes.

Para más detalles sobre el almacenamiento de Quartz y la configuración del job store, consulta la documentación oficial de Quartz.

Paso 2: Entender el modelo del scheduler​

Una tarea del scheduler es un trabajo más su configuración de lanzamiento.

En la práctica, trabajarás con:

  • tareas: qué ejecutar y cuándo
  • dependencias: qué debe ejecutarse cuando termine una tarea
  • servidores: dónde se ejecutan los trabajos de comando o basados en ficheros
  • calendarios: fechas que las planificaciones deben ignorar

Tipos de tarea:

Tipo de tareaFinalidad
Tarea de maintainEjecuta un maintain público con una planificación definida.
Tarea de comandoEjecuta un comando en el servidor seleccionado con la planificación definida.

Paso 3: Crear una tarea con el asistente​

El asistente de tareas es el punto de entrada principal para usar el scheduler.

1. Información básica de la tarea​

Este paso define la identidad de la tarea y el tipo de ejecución.

ElementoDefiniciónUso
NameNombre de la tareaObligatorio
ActiveEstado de la tareaObligatorio
DescriptionDescripción de la tareaOpcional
Max. stored executionsNúmero de ejecuciones almacenadas para las estadísticasOpcional
TimeoutTiempo máximo de ejecución en milisegundosOpcional
ExecuteComando o maintainObligatorio
CommandComando que se lanzaObligatorio en tareas de comando
Execute pathCarpeta donde se ejecuta el comandoOpcional en tareas de comando
Run on remote serverEjecuta el comando en un servidor SSH en lugar de en el host del schedulerOpcional en tareas de comando
Remote serverServidor SSH que ejecuta el comandoObligatorio si se marca la ejecución remota
MaintainMaintain que se lanzaObligatorio en tareas de maintain
Launch dependencies in case of warningSi las tareas dependientes pueden continuar ante un avisoOpcional
Launch dependencies in case of errorSi las tareas dependientes pueden continuar ante un errorOpcional
Set execution as warning in case of errorConvierte la ejecución padre en aviso cuando falla una dependenciaOpcional
note

Para exponer un maintain al scheduler, el maintain debe declararse con public="true".

2. Parámetros de la tarea​

Este paso define el contexto de ejecución que se pasa al maintain o al comando seleccionado.

ElementoDefiniciónUso
NameNombre del parámetroObligatorio
SourceDe dónde procede el valorObligatorio
TypeTipo de parámetro que se muestra al usuarioObligatorio
ValueValor literal o nombre de la variable referenciadaOpcional

En las tareas de maintain, los parámetros requeridos del maintain suelen añadirse automáticamente.

3. Modo de lanzamiento de la tarea​

Puedes elegir uno de tres estilos de lanzamiento:

Manual​

La tarea se ejecuta solo cuando se lanza manualmente desde la lista de tareas.

Este es también el modo necesario cuando una tarea se va a usar como destino de una dependencia.

Planificado​

La tarea se ejecuta según una configuración de planificación.

Usa este tutorial como orientación y pasa después a la guía de configuración de planificaciones para ver todas las opciones.

Fichero​

El scheduler comprueba periódicamente los ficheros y lanza el trabajo según los criterios de fichero configurados.

Campos habituales:

ElementoDefiniciónUso
Search atServidor donde se comprueban los ficherosObligatorio
File pathUbicación de los ficherosObligatorio
File patternPatrón que deben cumplir los ficherosObligatorio

Las credenciales FTP o SSH no forman parte de la tarea: se guardan en el servidor seleccionado en Search at (consulta Servidores).

4. Dependencias de la tarea​

Las dependencias permiten convertir tareas aisladas en un flujo de trabajo.

ElementoDefiniciónUso
TaskTarea que se ejecuta después de la actualObligatorio
BlockingSi es síncrona y puede detener la pila de dependencias ante un errorObligatorio
OrderOrden de lanzamiento de las dependencias bloqueantesObligatorio

Profundiza con la guía de dependencias.

5. Informe de la tarea​

El último paso configura qué ocurre cuando la tarea termina.

Modos de informe disponibles:

  • None: sin informe
  • Email: envía la información de la ejecución por correo electrónico
  • Broadcast: envía un mensaje de difusión a los usuarios seleccionados
  • Maintain: ejecuta un maintain como acción de informe

Campos de ejemplo del correo electrónico:

ElementoDefiniciónUso
Send in case ofEstados finales para los que se envía el correoObligatorio
Email serverConfiguración del remitenteObligatorio
Send to usersUsuarios destinatariosObligatorio
TitleTítulo del correoObligatorio
MessageMensaje del correoObligatorio

Paso 4: Elegir la profundidad de planificación adecuada​

En los primeros usos, normalmente basta con elegir correctamente el modelo de lanzamiento.

Planificaciones repetitivas​

Úsalas cuando la tarea deba ejecutarse cada X segundos, minutos, horas, días, meses o años.

Campos comunes habituales:

  • calendario
  • desde / hasta
  • repetir cada

Las combinaciones exactas de campos dependen de la unidad elegida, así que usa la guía de configuración de planificaciones cuando necesites la matriz completa.

Planificaciones únicas​

Úsalas cuando la tarea deba ejecutarse una sola vez en una fecha y hora concretas.

Planificaciones personalizadas​

Úsalas cuando necesites un control a nivel de Quartz. Es la opción más flexible, pero también la menos adecuada para un tutorial, así que prefiere la guía específica de planificaciones cuando llegues a este nivel.

Paso 5: Añadir dependencias cuando el flujo de tareas sea estable​

Las dependencias permiten que una tarea lance otras tareas cuando termina.

Dos modos prácticos son los más importantes:

Dependencias síncronas​

  • se configuran con Blocking = Yes
  • se ejecutan en un orden configurable
  • pueden detener la pila de dependencias si una tarea falla

Dependencias asíncronas​

  • no bloqueantes
  • se lanzan en bloque
  • el orden de ejecución no se configura de la misma forma

Regla importante: una tarea debe usar el modo de lanzamiento Manual antes de poder seleccionarse como destino de una dependencia.

Ejemplo de flujo de trabajo

Paso 6: Configurar servidores y calendarios solo cuando haga falta​

Servidores​

Los servidores se usan principalmente para la ejecución de comandos y las comprobaciones de tareas basadas en ficheros.

Campos principales:

ElementoDefiniciónUso
NameNombre del servidorObligatorio
ServerDirección del servidorObligatorio
PortPuerto del servidorObligatorio
Type of connectionProtocolo de conexión (ftp, folder o ssh)Obligatorio
ActiveEstado del servidorObligatorio
Server userUsuario para las conexiones SSH y FTPOpcional
Server passwordContraseña para las conexiones SSH y FTPOpcional
Private keyClave privada para las conexiones SSHOpcional
Private key passphraseFrase de paso de la clave privadaOpcional

Si un servidor está inactivo, las tareas que dependan de él no lo usarán.

Calendarios​

Los calendarios definen las fechas que el scheduler debe ignorar.

Campos básicos del calendario:

ElementoDefiniciónUso
NameNombre del calendarioObligatorio
DescriptionDescripción del calendarioObligatorio
ActiveEstado del calendarioObligatorio

Las fechas del calendario suelen requerir:

ElementoDefiniciónUso
DateFecha ignoradaObligatorio
NameNombre legible de la fechaOpcional

Cada tarea puede asociarse a un calendario.

Qué hacer a continuación​