Запуск метода Java в заданное время каждый день
Я относительно новичок в Java,и я взял проект для работы. Однако я наткнулся на квартал. Мне нужен метод, чтобы работать в определенное время в течение дня. Я сделал довольно много поиска, но я не могу найти ничего, что кажется, что это сделает трюк. Я столкнулся с классом Timer, но он работает с определенными интервалами. Класс Scheduler, по-видимому, имел ту же проблему. Я также наткнулся на кварц, но я думаю, что мне нужно что-то более легкое, и я мог только видеть как делать вещи с интервалами.
возможно, только потому, что я новичок, я пропустил некоторые вещи, которые могли бы помочь мне в этих классах, но я действительно застрял и мог бы использовать некоторую помощь.
Если кто-то может указать мне на класс, который будет запускать что-то в определенное время дня, каждый день (бонусные баллы за возможность отменить событие) и показать мне, как правильно использовать класс, это было бы потрясающе!
TL; DR: нужен класс, который делает что-то в то время дня, а не в интервале, потому что программа может быть перезапущена несколько раз в течение дня.
3 ответов
попробуйте класс TimerTask
для получения дополнительной информации проверить 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
Я настоятельно рекомендую, если это вообще возможно, что лучшим подходом было бы вызвать ваш скрипт или Java-приложение с помощью планировщика вашей ОС: например, "cron" в *nix или "планировщик задач" в Windows.
одной из возможностей может быть использование внешнего планировщика - в зависимости от желаемой точности. В UNIX используйте CRON, в Windows Используйте планировщик Windows. Это прекрасно изолирует время от дел.
можно использовать таймер и создать простой класс, который проверяет время каждую минуту или 5 минут в зависимости от желаемой детализации. Он будет очень легким.