Добавление задач по времени в веб -программы Java, вот два способа: 1. Используйте инъекцию слушателя; 2. Используйте весеннюю аннотацию @Scheduled Ingection.
Вторая форма рекомендуется.
1. Используйте инъекцию слушателя
①: Создайте класс слушателей:
Импорт javax.servlet.servletContextevent; Import javax.servlet.servletContextListener; открытый класс TimerDataskListener реализует ServletContextLister {@Override public void contextInitialized (ServletContexTevent ServletContexTexent) {new Timermanager (); } @Override public void contextDestroyed (ServletContexTevent servletContexTexTevent) {}}②: Создайте временный класс задания:
Импорт java.util.calendar; import java.util.date; import java.util.timer; public class timermanager {// интервал времени: 24 ч. public TimerManager () {календарный календарь = calendar.getInstance (); // Настроить выполнение календаря .set (calendar.hour_of_day, 12); Calendar.Set (Calendar.minute, 30); Calendar.Set (Calendar.second, 30); Дата даты = календарь.gettime (); // Время первого раз, чтобы выполнить задачу времени // Если время времени прошло, выполнение начнется на второй день, если (date.fore (new Date ())) {date = this.addday (date, 1); } Таймер timer = new Timer (); Timertaskservice task = new timertaskservice (); // Запланировано указанное задание, чтобы начать повторять фиксированную задержку в указанное время. timer.schedule (задача, дата, period_day); } // Увеличение или уменьшение количества дней частной даты addday (дата даты, int num) {calendar startdt = calendar.getInstance (); startDT.SetTime (дата); startDT.Add (calendar.day_of_month, num); return startDt.getTime (); }}③: Создайте класс Timertask:
Import java.util.timertask; открытый класс TimertaskService Extends Timertask {@Override public void run () {try {// Логика задачи, которая должна быть выполнена, записывается здесь System.out.println («Вставьте пароль успешно!»); } catch (Exception e) {System.out.println ("Вставка пароля не удастся!"); }}}④: Зарегистрируйте слушатель в web.xml
<!-TimerDatataskListener Слушатель-> <Learser> <Learser-class> com.jsiqi.resume.service.timerdatasklistener </sluster-class> </sluster>
2. инъекция с использованием пружинной аннотации
Структура для моего проекта - Spring + Springmvc + Mybatis
Пример кода:
Import org.springframework.scheduling.annotation.scheduled; import org.springframework.stereotyle.component; @componentpublic class timertask {@scheduled (cron = " */30 * * * *") System.out.println («Успешно вставить пароль!»); } catch (Exception e) {System.out.println ("Вставка пароля не удастся!"); }}}Настройка времени времени заключается в следующем:
Конфигурация Crontrigger Полный формат: [Секунды] [минуты] [часов] [Days] [месяцы] [недели] [Годы] Пример: 0 0 10,14,16 * *? 10 утра каждый день, 14:00, 4: 0 0/30 9-17 * *? 0 полчаса в течение девяти до пяти рабочих часов 0 0 12? * Ср указывает, что каждую среду в 12 часов "0 0 12 * *?" 0 15 10 * *? «10:15 каждый день запускается» 0 15 10 * *? 2005 "2005 Daily Trigger" 0 * 14 * *? "Триггер" 0/5 14 * *? "Триггер" 0/5 14 * *? "" Триггер "0/5 14,18 * *?" Триггер "0/5 14,18 * *? 3 Ср "Триггер" 0 10 и 14:44 по средам марта каждого года 10:15 в понедельник по пятницу триггер "0 15 10 15 *?" 10:15 15 -го числа месяца "0 15 10 L *?" 10:15 утра в последний день месяца "0 15 10? * 6L" 10:15 в последнюю пятницу месяца "0 15 10? * 6L" 10:15 в последнюю пятницу месяца "0 15 10? * 6L 2002-2005" 10:15 в последнюю пятницу месяца "0 15 10?
| Серийный номер | иллюстрировать | Это требуется | Разрешенные значения | Разрешены подстановочные знаки |
|---|---|---|---|---|
| 1 | Второй | да | 0-59 | , - * / |
| 2 | точка | да | 0-59 | , - * / |
| 3 | час | да | 0-23 | , - * / |
| 4 | день | да | 1-31 | , - *? / Lw |
| 5 | луна | да | 1-12 или ян-дек | , - * / |
| 6 | неделя | да | 1-7 или солнце-сат | , - *? / Lw |
| 7 | Год | нет | пусто или 1970-2099 | , - * / |
Описание подстановочного знака:
* означает все значения. Например: установите «*» на частичное поле, что означает, что каждая минута будет запускаться.
? означает, что значение не указано. Используемый сценарий заключается в том, что вам не нужно заботиться о значении этого поля, установленного в настоящее время.
Например: операция должна быть вызвана 10 -го числа каждого месяца, но она не заботится о еженедельном дне, поэтому поле, которое необходимо установить на «?» установлено на 0 0 0 10 *?
- Указывает интервал. Например, установка «10-12» на час означает, что 10, 11 и 12 баллов будут запускаются.
, означает определение нескольких значений, например, настройка «Mon, Wed, Fri» на еженедельном поле означает, что запускается в понедельник, среду и пятницу
/ для постепенного запуска. Если установить «5/15» на второй, это означает, что начинается с 5 секунд, запуская каждые 15 секунд (5,20,35,50). Установите «1/3» на поле месяца, чтобы начать с 1 -го числа месяца и запускать каждые три дня.
L означает окончательное значение. В дневном поле, это указывает на последний день месяца (на основе текущего месяца, если это будет февраль, он также будет основан на том, является ли он Runnian [LEAP]). На неделе он указывает в субботу, что эквивалентно «7» или «SAT». Если число предшествует «L», это означает последнюю из данных. Например, установление формата, подобного «6L» в еженедельной области, означает «последняя пятница месяца»
W указывает ближайший рабочий день к указанной дате (с понедельника по пятницу). Например, установите «15 Вт» в поле, чтобы указать ближайший рабочий день до 15 -го числа каждого месяца. Если 15 -е место оказалось в субботу, ищите самый последний триггер в пятницу (14 -й). Если 15 -е не еженедельно, ищите самый последний триггер понедельника (16 -го). Если 15 -е место оказалось в будние дни (с понедельника по пятницу), это будет вызвано в тот день. Если формат указан как «1W», это указывает на самый последний рабочий день после 1 -го числа каждого месяца. Если 1 -й - суббота, он будет запустить 3 -е место в следующий понедельник. (Примечание, только конкретные числа могут быть установлены до «w», а интервалы »-« не допускаются).
# Серийный номер (представляет собой неделю каждого месяца), например, установление «6# 3» в поле недели указывает на третью субботу каждого месяца. Обратите внимание, что если указан «#5», оказалось, что в субботу на пятой неделе нет субботы, конфигурация не будет вызвана (она наиболее подходит для Дня матери и Дня отца);
Советы:
'L' и 'w' можно использовать в комбинации. Если «LW» устанавливается на поле дня, это означает, что он запускается в последний рабочий день месяца;
Установка поля недели нечувствительна, если используются английские буквы, то есть Mon такой же, как и MON;
См.
https://www.cnblogs.com/liaojie970/p/5913272.html
http://prisonbreak.iteye.com/blog/2247216