Adicionando tarefas de tempo aos programas da Web Java, aqui estão duas maneiras: 1. Use injeção de ouvinte; 2. Use injeção de anotação da primavera @Scheduled.
O segundo formulário é recomendado.
1. Use injeção de ouvinte
①: Crie uma classe de ouvinte:
importar javax.servlet.servletLextevent; importar javax.servlet.servletContextListener; public class TimerDatataSkListener implementa servletContextListener {@Override public void contextinitialized (servletContexteventEventContexTevent) {Timmanager; } @Override public void contextDestroyed (servletContextevent servletContextevent) {}}②: Crie uma classe de tarefa cronometrada:
importar java.util.calendar; importar java.util.date; importar java.util.timer; public classe timerManager {// intervalo de tempo: 24H estático privado final long period_day = 24 * 60 * 60 * 1000; public timerManager () {calendário calendário = calendar.getInstance (); // personalize a execução do calendário.set (calendar.hour_of_day, 12); calendário.set (calendário.Minute, 30); calendário.set (calendário.second, 30); Data data = calendário.gettime (); // Hora da primeira vez para executar a tarefa de tempo // Se o momento do tempo tiver passado, a execução começará no segundo dia se (data.Before (new Date ())) {date = this.addday (data, 1); } Timer timer = new Timer (); Tarefa TimerTaskService = new TimertosTaskService (); // Programe a tarefa especificada para iniciar a execução de atraso fixo repetido no horário especificado. Timer.Schedule (Tarefa, Data, Período_Day); } // Aumentar ou diminuir o número de dias de data privada addday (data da data, int num) {calendário startdt = calendar.getInstance (); startdt.setTime (data); startdt.add (calendar.day_of_month, num); return startdt.gettime (); }}③: Crie a classe Timertosk:
importar java.util.timERTask; classe pública TimertoskService estende o TimerTask {@Override public void run () {try {// A lógica da tarefa a ser executada é escrita aqui System.out.println ("Insira a senha com sucesso!"); } catch (Exceção e) {System.out.println ("Inserir a senha falhou!"); }}}④: Registre o ouvinte em web.xml
<!-TimerDatataSkListener ouvinte-> <Ilvier> <lister-class> com.jsiqi.resume.service.timerdatataklistener
2. Injetar usando a anotação da primavera
A estrutura para o meu projeto é Spring + Springmvc + Mybatis
Exemplo de código:
import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;@Componentpublic class TimerTask { @Scheduled(cron="*/30 * * * * *") // Execute public void test(){ try { //The task logic to be executed is written here System.out.println ("Insira a senha com sucesso!"); } catch (Exceção e) {System.out.println ("Inserir a senha falhou!"); }}}A configuração do tempo de tempo é a seguinte:
Configuração do CRontrigger O formato completo é: [segundos] [minutos] [horas] [dias] [meses] [semanas] [anos] Exemplo: 0 0 10,14,16 * *? 10h todos os dias, 14h, 4: 0 0/30 9-17 * *? 0 meia hora durante nove a cinco horas de trabalho 0 0 12? * Qua indica que toda quarta -feira às 12h "0 0 12 * *?" 0 15 10 * *? "10:15 todos os dias desencadeados" 0 15 10 * *? 2005 "2005 diariamente gatilho" 0 * 14 * *? "Trigger" 0 0/5 14 * *? "Trigger" 0 0/5 14 * *? "Trigger" 0 0/5 14,18 * *? "Trigger" 0 0/5 14,18 * * *? "Trigger" 0 0-5 14 * *? "Trigger" 0-5 14 * * * * * * * * * * *? 3 Qua "Trigger" 0 10 e 14:44 às quartas -feiras de março de cada ano 10:15 de segunda a sexta -feira Trigger "0 15 10 15 *?" 10:15 no dia 15 do mês "0 15 10 l *?" 10:15 No último dia do mês "0 15 10? * 6l" 10:15 na última sexta-feira do mês "0 15 10?
| Número de série | ilustrar | É necessário | Valores permitidos | Permitido Wildcards |
|---|---|---|---|---|
| 1 | Segundo | sim | 0-59 | , - * / |
| 2 | apontar | sim | 0-59 | , - * / |
| 3 | hora | sim | 0-23 | , - * / |
| 4 | dia | sim | 1-31 | , - *? / Lw |
| 5 | lua | sim | 1-12 ou janeiro-dezembro | , - * / |
| 6 | semana | sim | 1-7 ou Sol-Sáb | , - *? / Lw |
| 7 | Ano | não | vazio ou 1970-2099 | , - * / |
Descrição do curinga:
* significa todos os valores. Por exemplo: Defina "*" no campo parcial, o que significa que cada minuto será acionado.
? significa que nenhum valor é especificado. O cenário usado é que você não precisa se preocupar com o valor deste campo atualmente definido.
Por exemplo: uma operação deve ser acionada no dia 10 de cada mês, mas não se importa com o dia semanal, então o campo que precisa ser definido como "?" está definido como 0 0 0 10 *?
- indica intervalo. Por exemplo, definir "10-12" na hora significa que 10, 11 e 12 pontos serão acionados.
, significa especificar vários valores, por exemplo, definir "Seg, Wed, Fri" no campo semanal significa desencadear na segunda, quarta e sexta -feira
/ para disparo incremental. Se definir "5/15" no segundo, significa que a partir de 5 segundos, acionando a cada 15 segundos (5,20,35,50). Defina '1/3' no campo Mês para começar no 1º do mês e acionar a cada três dias.
L significa o significado final. Na configuração de campo do dia, indica o último dia do mês (com base no mês atual, se for fevereiro, também se baseará se é Runnian [Leap]). No campo da semana, indica sábado, o que é equivalente a "7" ou "SAT". Se um número for precedido por "L", significa o último dos dados. Por exemplo, definir um formato como "6L" no campo semanal significa "a última sexta -feira do mês"
W indica o dia útil mais próximo da data especificada (de segunda a sexta -feira). Por exemplo, defina "15W" no campo diário para indicar o dia útil mais próximo até o dia 15 de cada mês. Se o dia 15 for sábado, procure o gatilho mais recente de sexta -feira (14º). Se o dia 15 não for semanalmente, procure o gatilho mais recente de segunda -feira (16). Se o dia 15 estiver no dia da semana (de segunda a sexta -feira), ele será acionado naquele dia. Se o formato for especificado como "1W", indica o dia útil mais recente após o 1º de cada mês. Se o 1º for sábado, ele será acionado no dia 3 da próxima segunda -feira. (Observe que apenas números específicos podem ser definidos antes de "W" e intervalos "-" não são permitidos).
# Número de série (representa a semana de cada mês), por exemplo, definir "6# 3" no campo da semana indica o terceiro sábado de cada mês. Observe que se "#5" for especificado, acontece que não há sábado na quinta semana, a configuração não será acionada (é mais adequado para o Dia das Mães e o Dia dos Pais);
Pontas:
'L' e 'W' pode ser usado em combinação. Se "LW" estiver definido no campo do dia, significa que é acionado no último dia útil do mês;
O cenário do campo da semana é insensível a minúsculas se as letras em inglês forem usadas, ou seja, MON é o mesmo que MON;
Consulte:
https://www.cnblogs.com/liaojie970/p/5913272.html
http://prisonbreak.iteye.com/blog/2247216