tiempo - reloj alarma java
Ejecutar un método Java a una hora determinada cada día (3)
Sugeriría, si es posible, que el mejor enfoque sería invocar el script o la aplicación Java mediante el programador del sistema operativo: por ejemplo, "cron" en * nix, o "task scheduler" en Windows.
Soy relativamente nuevo en Java y he retomado un proyecto para trabajar. Sin embargo, me encontré con un bloque. Necesito un método para ejecutar en ciertos momentos durante el día. He hecho bastante búsqueda, pero no puedo encontrar nada que parezca que sería suficiente. Me encontré con la clase Timer pero parece ejecutarse en ciertos intervalos. La clase Programador parecía tener el mismo problema. También me encontré con Quartz pero creo que necesito algo más liviano y solo podía ver cómo hacer las cosas a intervalos.
Tal vez, solo porque soy nuevo, me he perdido algunas cosas que podrían ayudarme en estas clases, pero estoy realmente atascado y podría necesitar algo de ayuda.
Si alguien pudiera dirigirme a una clase que ejecutará algo a una hora determinada del día, todos los días (puntos de bonificación por poder cancelar el evento), y mostrarme cómo usar correctamente la clase, ¡eso sería increíble!
TL; DR: Necesita una clase que haga algo a una hora del día, no a intervalos porque el programa puede reiniciarse varias veces a lo largo del día.
Una posibilidad podría ser utilizar un programador externo, según la precisión deseada. En UNIX use CRON, en Windows use el Programador de Windows. Eso aísla muy bien el tiempo de hacerlo.
Podría usar un temporizador y crear una clase simple que verifique el tiempo cada minuto o 5 minutos dependiendo de la granularidad deseada. Sería muy ligero.
prueba la clase TimerTask
para obtener más información, consulte http://oreilly.com/java/archive/quartz.html
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class ReportGenerator extends TimerTask {
public void run() {
System.out.println("Generating report");
//TODO generate report
}
}
class MainApplication {
public static void main(String[] args) {
Timer timer = new Timer();
Calendar date = Calendar.getInstance();
date.set(
Calendar.DAY_OF_WEEK,
Calendar.SUNDAY
);
date.set(Calendar.HOUR, 0);
date.set(Calendar.MINUTE, 0);
date.set(Calendar.SECOND, 0);
date.set(Calendar.MILLISECOND, 0);
// Schedule to run every Sunday in midnight
timer.schedule(
new ReportGenerator(),
date.getTime(),
1000 * 60 * 60 * 24 * 7
);
}//Main method ends
}//MainApplication ends