es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Un enfoque potencial podría ser utilizar ScheduledExecutorService del paquete java.util.concurrent. Esto le permitiría programar una tarea para que se ejecute en intervalos fijos (en este caso, cada hora) con un mínimo sobrecarga.

    Aquí hay un ejemplo de implementación utilizando SLF4J:

    import java.util.concurrent.Executors;
    import java.util.concurrent.ScheduledExecutorService;
    import java.util.concurrent.TimeUnit;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class HourlyLogger {
    
        private static final Logger LOG = LoggerFactory.getLogger(HourlyLogger.class);
    
        private static final long INTERVAL_HOURS = 1;
    
        private static final long INITIAL_DELAY_MINS = 60 - TimeUnit.MILLISECONDS.toMinutes(System.currentTimeMillis() % TimeUnit.HOURS.toMillis(1));
    
        private ScheduledExecutorService executor;
    
        public HourlyLogger() {
            executor = Executors.newSingleThreadScheduledExecutor();
            executor.scheduleAtFixedRate(() -> {
                LOG.info("Declaración de registro - esto solo aparecerá una vez por hora");
            }, INITIAL_DELAY_MINS, INTERVAL_HOURS, TimeUnit.MINUTES);
        }
    
        public void stop() {
            executor.shutdown();
        }
    }
    

    Este ejemplo de programador ejecutará la declaración de registro con un intervalo de una hora y una demora inicial que asegura que la primera declaración se registre exactamente 60 minutos después del inicio del programa.

    Para utilizar esta clase, simplemente cree una instancia en su aplicación y llame al método stop cuando haya terminado para cerrar el servicio de ejecución.

Comments are closed.