Agregar tareas de tiempo a los programas web de Java, aquí hay dos maneras: 1. Use la inyección del oyente; 2. Use la anotación de primavera @scheduled inyección.
Se recomienda el segundo formulario.
1. Use la inyección del oyente
①: Crea una clase de oyente:
import javax.servlet.servletContextEvent; import javax.servlet.servletContextListener; public class timerDataTAtAskListener implementa servletContextListener {@Override public void contextInitialized (ServletContextEvent ServletContextEvent) {new Timermanager (); } @Override public void contextDestroyed (servletContextEvent ServletContextEvent) {}}②: Crear una clase de tareas cronometrada:
import java.util.calendar; import java.util.date; import java.util.timer; public class timermanager {// intervalo de tiempo: 24h estático privado final largo long_day = 24 * 60 * 60 * 1000; public timermanager () {calendar calendar = calendar.getInstance (); // Personalizar la ejecución de calendar.set (calendar.hour_of_day, 12); calendario.set (calendario. Minute, 30); calendario.set (calendario. Segundo, 30); Fecha fecha = calendar.gettime (); // hora de la primera vez para ejecutar la tarea de tiempo // Si ha pasado el punto de tiempo de la hora, la ejecución comenzará en el segundo día si (date.before (new date ())) {date = this.addday (fecha, 1); } Temporizador de temporizador = new Timer (); Tarea de TimeTaskService = new TimeTaskService (); // Programe la tarea especificada para iniciar la ejecución de retraso fijo repetido en el momento especificado. timer.schedule (tarea, fecha, period_day); } // Aumentar o disminuir el número de días Fecha privada Addday (fecha de fecha, int num) {calendar startdt = calendar.getInstance (); startdt.settime (fecha); startdt.add (calendar.day_of_month, num); return startdt.gettime (); }}③: Crear clase TimeTask:
import java.util.timerTask; public class TimeTaskService extiende TimeTask {@Override public void run () {try {// La lógica de tareas que se ejecutará se escribe aquí system.out.println ("Inserte la contraseña con éxito!"); } catch (Exception e) {System.out.println ("¡Insertar contraseña fallida!"); }}}④: Registre el oyente en Web.xml
<
2. Inyectar usando anotación de primavera
El marco para mi proyecto es Spring + SpringMVC + MyBatis
Ejemplo de código:
importar org.springframework.scheduling.annotation.scheduled; import org.springframework.stereotype.component; @ComponentPublic Clase TimeTask {@Scheduled (Cron = " */30 * * * * *") // ejecute public void typ () {intent {// El logic de la tarea a ser ejecutado es ejecutado es escrito es escrito se escribe aquí es escrito aquí. System.out.println ("Inserte la contraseña con éxito!"); } catch (Exception e) {System.out.println ("¡Insertar contraseña fallida!"); }}}La configuración del tiempo de tiempo es la siguiente:
El formato completo de configuración de Crontrigger es: [segundos] [minutos] [horas] [días] [meses] [semanas] [años] Ejemplo: 0 0 10 10,14,16 * *? 10 am todos los días, 2 pm, 4: 0 0/30 9-17 * *? 0 media hora durante nueve a cinco horas de trabajo 0 0 12? * Wed indica que todos los miércoles a las 12 del mediodía "0 0 12 * *?" 0 15 10 * *? "10:15 am todos los días activados" 0 15 10 * *? 2005 "2005 DIARIO DIARIO" 0 * 14 * *? "ARCHILE" 0 0/5 14 * *? "ARCHIGER" 0 0/5 14 * *? "ARCHIVE" 0 0/5 14,18 * * *? "ACTIVE" 0 0/5 14,18 * *? "ARGRIGHT" 0 0-5 14 * *? "Aparcionamiento" 0 -5 14 * *? "¿ARGEN" 0 10,44 14 14 14? 14? 3 Wed "Trigger" 0 10 y 2:44 pm los miércoles de marzo de cada año 10:15 am de lunes a viernes disparador "0 15 10 15 *?" 10:15 am el 15 del mes "0 15 10 L *?" 10:15 am on the last day of the month "0 15 10 ? * 6L" 10:15 am on the last Friday of the month "0 15 10 ? * 6L" 10:15 am on the last Friday of the month "0 15 10 ? * 6L 2002-2005" 10:15 am on the last Friday of the month "0 15 10 ? * 6#3" 10:15 am on the third Friday of the month
| Número de serie | ilustrar | ¿Es requerido? | Valores permitidos | Comodines permitidos |
|---|---|---|---|---|
| 1 | Segundo | Sí | 0-59 | , - * / |
| 2 | punto | Sí | 0-59 | , - * / |
| 3 | hora | Sí | 0-23 | , - * / |
| 4 | día | Sí | 1-31 | , - *? / LW |
| 5 | luna | Sí | 1-12 o enero-dic. | , - * / |
| 6 | semana | Sí | 1-7 o sábado | , - *? / LW |
| 7 | Año | No | vacío o 1970-2099 | , - * / |
Descripción del comodín:
* significa todos los valores. Por ejemplo: establezca "*" en el campo parcial, lo que significa que cada minuto se activará.
? significa que no se especifica ningún valor. El escenario utilizado es que no necesita preocuparse por el valor de este campo actualmente establecido.
Por ejemplo: una operación se activará el día 10 de cada mes, pero no le importa el día semanal, por lo que el campo debe estar establecido en "?" está configurado en 0 0 0 10 *?
- Indica el intervalo. Por ejemplo, establecer "10-12" en la hora significa que se activarán 10, 11 y 12 puntos.
, significa especificar múltiples valores, por ejemplo, establecer "Mon, Wed, Vie" en el campo semanal significa activarse los lunes, miércoles y viernes
/ Para desencadenación incremental. Si establece "5/15" en el segundo, significa que a partir de 5 segundos, activando cada 15 segundos (5,20,35,50). Establezca '1/3' en el campo del mes para comenzar el 1 ° del mes y activarse cada tres días.
L significa el significado final. En la configuración del campo del día, indica el último día del mes (según el mes actual, si es febrero, también se basará en si es Runnian [LEAP]). En el campo de la semana, indica el sábado, que es equivalente a "7" o "SAT". Si un número está precedido por "L", significa el último de los datos. Por ejemplo, establecer un formato como "6L" en el campo semanal significa "el último viernes del mes"
W indica el día laboral más cercano a la fecha especificada (de lunes a viernes). Por ejemplo, establezca "15W" en el campo del día para indicar el día laboral más cercano al 15 de cada mes. Si el 15 es el sábado, busque el disparador más reciente del viernes (14). Si el 15 no es semanal, busque el disparador más reciente del lunes (16). Si el 15 es el día de la semana (de lunes a viernes), se activará ese día. Si el formato se especifica como "1W", indica el día de trabajo más reciente después del 1 de cada mes. Si el 1er es el sábado, se activará el tercer lunes el próximo lunes. (Tenga en cuenta que solo se pueden establecer números específicos antes de "W", y los intervalos "-" no están permitidos).
# Número de serie (representa la semana de cada mes), por ejemplo, establecer "6# 3" en el campo de la semana indica el tercer sábado de cada mes. Tenga en cuenta que si se especifica "#5", sucede que no hay sábado en la quinta semana, la configuración no se activará (es más adecuada para el Día de la Madre y el Día del Padre);
Consejos:
'L' y 'W' se pueden usar en combinación. Si "LW" está establecido en el campo de día, significa que se activa el último día hábil del mes;
La configuración del campo de la semana es insensible al caso si se usan las letras inglesas, es decir, lun es lo mismo que mon;
referirse a:
https://www.cnblogs.com/liaojie970/p/5913272.html
http://prisonbreak.iteye.com/blog/2247216