Introducción a JobRunr
JobRunr es una biblioteca Java diseñada para simplificar el procesamiento de tareas en segundo plano. Ofrece una API intuitiva para manejar tareas diferidas, programadas o periódicas, con soporte para almacenamiento persistente y procesamiento distribuido. Compatible con múltiples bases de datos relacionales y NoSQL, como PostgreSQL, MySQL, ElasticSearch y MongoDB.
Configuración rápida
Agregar dependencias
Para Maven, incluye el siguiente bloque en tu archivo pom.xml:
<dependency>
<groupId>org.jobrunr</groupId>
<artifactId>jobrunr</artifactId>
<version>6.3.1</version>
</dependency>
Si usas Gradle, añade esta línea a tu archivo build.gradle:
implementation 'org.jobrunr:jobrunr:6.3.1'
Configuración en Spring Boot
Activa los componentes necesarios en tu archivo de propiedades:
# Habilitar el planificador de trabajos
org.jobrunr.job-scheduler.enabled=true
# Habilitar el servidor de trabajos en segundo plano
org.jobrunr.background-job-server.enabled=true
# Habilitar el panel de control
org.jobrunr.dashboard.enabled=true
Creación de una tarea de ejemplo
Define una clase para la tarea con la anotación @Job:
import org.jobrunr.jobs.annotations.Job;
import org.springframework.stereotype.Component;
@Component
public class TareaDemostrativa {
@Job(name = "Tarea de ejemplo")
public void ejecutar() {
System.out.println("¡La tarea se ha completado!");
}
}
Lanzamiento de la tarea
Entegra el planificador en la clase principal de la aplicación:
import org.jobrunr.scheduling.JobScheduler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class AplicacionDemo implements CommandLineRunner {
@Autowired
private JobScheduler planificador;
@Autowired
private TareaDemostrativa tarea;
public static void main(String[] args) {
SpringApplication.run(AplicacionDemo.class, args);
}
@Override
public void run(String... args) {
planificador.enqueue(() -> tarea.ejecutar());
}
}
Casos de uso y buenas prácticas
Ejemplos comunes
- Tareas diferidas: Enviar notificaciones por correo electrónico tras un retraso, como un correo de bienvenida después del registro.
- Tareas programadas: Ejecutar copias de seguridad de bases de datos a horas específicas.
- Tareas periódicas: Actualizar cachés o índices de forma recurrente.
Recomendaciones de implementación
- Reintentos automáticos: Configura reintentos para manejar fallos temporales sin perder tareas.
- Priorización: Asigna prioridades a las tareas para conrtolar el orden de ejecución.
- Monitoreo: Utiliza el panel de control de JobRunr para supervisar el estado de las tareas en tiempo real.
Integraciones clave
- Spring Boot: Facilita la integración mediante autoconfiguración y soporte nativo.
- Docker: Permite deslpegar y escalar aplicaciones de forma sencilla en contenedores.
- Kubernetes: Soporta despliegues en clústeres para alta disponibilidad y escalabilidad automática.