Saltar al contenido

¿Proporcionar zona horaria a Spring @Scheduled?

Nuestros mejores investigadores han agotado sus provisiones de café, buscando día y noche por la solución, hasta que Liliana halló la solución en Bitbucket así que ahora la comparte contigo.

Solución:

Resultó que no podía usar el @Scheduled anotación, pero implementé una solución alternativa. En el JavaDoc de SchedulingConfigurer se afirma que:

[SchedulingConfigurer is] Por lo general, se usa para configurar un bean TaskScheduler específico que se usará al ejecutar tareas programadas o para registrar tareas programadas de forma programática en oposición al enfoque declarativo de usar la anotación @Scheduled.

A continuación, cambié el trabajo cron para implementar el Runnable interfaz y luego actualicé mi archivo de configuración para implementar el SchedulingConfigurervea abajo:

@Configuration
@EnableScheduling
@ComponentScan("package.that.contains.the.runnable.job.bean")
public class JobConfiguration implements SchedulingConfigurer 

    private static final String cronExpression = "0 0 14 * * *";
    private static final String timeZone = "CET";

    @Autowired
    private Runnable cronJob;

    @Bean
    CronTrigger cronTrigger() 
        return new CronTrigger(cronExpression, TimeZone.getTimeZone(timeZone));
    

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) 
        taskRegistrar.addCronTask(new CronTask(job, cronTrigger()));
    

Lea el JavaDoc de @EnableScheduling para obtener más información.


Actualizar

A partir de Spring 4, se resolvió el problema SPR-10456 de Spring Jira. En consecuencia, el @Scheduled la anotación tiene una nueva zona attribute exactamente para este propósito, por ejemplo

@Scheduled(cron = "0 0 14 * * *", zone = "CET")
public void execute() 
    // do scheduled job

hay elemento zone en anotación @Scheduleda partir de la versión 4.0.

Puede insertar una zona horaria como string que puede ser aceptado por java.util.TimeZone.

Tu código debería ser así:

@Scheduled(cron = "0 0 14 * * *", zone = "GMT-5")
    public void execute() 
     // do scheduled job

“Zona” será la zona horaria del país deseado.

Aquí hay un buen tutorial sobre tareas programadas con Spring:

https://www.baeldung.com/cron-expresiones

Recuerda algo, que tienes la capacidad de esclarecer tu experiencia .

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *