Recientemente, es necesario implementar tareas de ejecución programadas en proyectos, como el cálculo cronometrado de puntos de miembros, llamando a interfaces de terceros, etc. Dado que el proyecto usa el marco de Spring, se introduce aquí junto con el marco de Spring.
Escribir tarea
Es decir, pojo ordinario, como sigue:
package com.pcmall.task;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class TaskA {private static Logger logger = LoggerFactory.getLogger(TaskA.class);public void taskA1(){for(int i=0;i<100;i++){System.out.println("----A1----" + i);}} public void taskA2 () {for (int i = 0; i <100; i ++) {System.out.println ("----- a2 ----"+i);}}} Establecer tareas específicas en el archivo de configuración de Spring
<? xml versión = "1.0" encoding = "utf-8"?> <frijoles xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: esquemalation http://www.springframework.org/schema/beans/spring-beanss.xsd"><bean id = "taska"> </bean> <bean id = "taskb"> </bean> <Bean> <bean id = "taskJoba1"> <nombre de propiedad = "referencia de TaskA"> </propiedad> <name de propiedad de propiedad. value="taskA1"></property><property name="concurrent" value="false"></property></bean><bean id="taskJobA2"><property name="targetObject" ref="taskA"></property><property name="targetMethod" value="taskA2"></property><property name="concurrent" value="false"></property></bean><bean id = "taskJobb1"> <Property name = "TargetObject" ref = "taskb"> </property> <Property name = "targetMethod" valor = "taskb1"> </propiedad> <propiedad name = "concurrent" value = "false"> </propiedad> </bean> <bean id = "taskjobb2"> <<property name = "targetObject" reh = "taskb"> <<</</bean> <bean id = "taskjobb2"> <name de la propiedad = "TargetObject" Refin. valor valor = "taskb2"> </propiety </Property <Spertity Name = "Concurrent" Value = "False"> </process> </ Bean> <Bean id = "TaskA1Tirger"> <Property Name = "JobDetail" id = "taskA2Trigger"> <Property name = "JobDetail"> <ref Bean = "taskJOBA2"/> </propietS> <Property name = "cronexpression"> <valor> 0 0/2 * * *? </salon> </propiedad> </bean id = "taskb1trigger"> <name de propiedad = "jobdetail"> <ref gaan = "taskjB1/"/"Propiedad </propiedad de la propiedad </Propiedad </Propiedad </propiedad de la propiedad </Propiedad </Propiedad </Propiedad </Propiedad </Propiedad </name de propiedad"> <Refan = " name = "cronexpression"> <value> 0 0/1 * * *? </valor> </propiedad> </bean> <bean id = "taskb2Trigger"> <Property name = "JobDetail"> <ref Bean = "taskJobb2"/> </Property> <Property Name = "CRonexpression"> <valor> 0 0/2 * * * * *? </Value> </Property </Property </Property " class = "org.springframework.scheduling.quartz.schedulerFactoryBean"> <Property name = "disparadores"> <list> <ref bean = "taskA1Trigger" /> <ref bean = "taska2Trigger" /> <ref bean = "taskB1Trigger" /> <ref bean = "taskb2Trigger" /> < /list> < /propager "
Aviso
Un desencadenante solo puede activar un trabajo, pero un trabajo puede ser activado por múltiples desencadenantes, lo que causará problemas de concurrencia esta vez. En cuarzo, si no desea ejecutar el mismo trabajo al mismo tiempo, puede implementar un estado de estado en lugar de un trabajo. Si usa MethodInvokingJobDetailFactoryBean en Spring, puede hacerlo configurando la propiedad concurrente = "falso".
Nota final
Los beneficios de usar cuarzo en primavera en lugar de una sola aplicación incluyen:
Poner todas las configuraciones de programación de tareas en el mismo lugar hace que las tareas sean fáciles de mantener.
La codificación de trabajo solo es posible, la configuración se puede configurar y programador
Puede usar POJO Java Bean para ejecutar trabajos sin implementar la interfaz de trabajo
Uso detallado de expresiones cron
Caracteres especiales permitidos por valores permitidos en el campo
0-59 segundos, - * /
0-59, - * /
Horas 0-23, - * /
Fecha 1-31, - *? / LWC
Meses 1-12 o Jan-Dec,- * /
Semana 1-7 o Sun-sat,- *? / LC #
Año (opcional) Salir en blanco, 1970-2099, - * /
ejemplo:
0/5 * * * *? : Ejecutar cada 5 segundos
El personaje "" se usa para especificar todos los valores. Por ejemplo: "" significa "por minuto" en el campo de los minutos.
El "?" El carácter solo se usa en los campos de fecha y día de semana. Se utiliza para especificar "valores no explanatorios". Es útil cuando necesita especificar algo de uno de estos dos dominios. Entenderá mirando el ejemplo a continuación.
Los dos elementos de la fecha en el mes y la fecha de la semana son mutuamente excluyentes juntos. Establezca un signo de interrogación para indicar que no desea establecer ese campo.
El personaje "-" se usa para especificar un rango. Por ejemplo: "10-12" significa "10, 11, 12".
El carácter "," se usa para especificar un valor adicional. Por ejemplo: "Mon, Wed, Vie" significa "Lun, miércoles, viernes" en el campo de la semana.
El carácter "/" se usa para especificar el incremento. Por ejemplo: "0/15" en el segundo campo significa 0, 15, 30 y 45 segundos por minuto. "5/15" representa 5, 20, 35 y 50 por hora en el campo minuto. El símbolo "" es antes "/" (como:/10) es equivalente a 0 antes "/" (como: 0/10). Recuerde una esencia: cada campo numérico de una expresión es un conjunto de valores máximos y mínimos, como: el conjunto de campos de segundos y minuto es 0-59, los campos de fecha son 1-31 y los campos de mes son 1-12. El personaje "/" puede ayudarlo a obtener el valor numérico correspondiente en cada campo de caracteres. Por ejemplo: "7/6" solo se activará en julio cuando el dominio del mes, y no significa cada junio.
L es una palabra omitida para 'último' que puede representar los campos del día del mes y el día de la semana, pero el significado es diferente en los dos campos, por ejemplo, el campo del día del mes representa el último día de un mes. Si el campo del día de la semana significa '7' o 'SAT', si el número está precedido por el campo del día de la semana, significa los últimos días de un mes, como '6L' significa el último viernes de un mes.
El personaje "W" solo permite que aparezca el campo de fecha. Este personaje se usa para el día de trabajo más reciente de la fecha especificada. Por ejemplo: si escribe "15W" en el campo de la fecha, significa: el día laboral más reciente de este mes el 15 de este mes. Entonces, si el 15 es el sábado, la misión se activará el 14. Si 15 es mejor el domingo, la tarea se activará el lunes, es decir, el 16. Si completa "1W" en el campo de la fecha, incluso si el 1er es el sábado, la tarea solo se activará el próximo lunes, es decir, el tercero. El día de trabajo más reciente especificado por el personaje "W" no se puede cruzar al mes. El personaje "W" solo se puede usar con un valor separado, y no puede ser un campo numérico, como: 1-15W es incorrecto.
"L" y "W" se pueden usar de manera conjunta en el campo de la fecha, y LW representa el día hábil de la última semana del mes.
El personaje "#" solo puede aparecer en el dominio del día de la semana. Este personaje se usa para especificar un cierto día del mes. Por ejemplo: "6#3" significa el viernes de la tercera semana del mes (6 significa viernes, 3 medias Semana 3). "2#1" significa el lunes de la primera semana del mes. "4#5" significa miércoles de la quinta semana.
El personaje "C" puede aparecer en los campos de la fecha y el día de la semana. Este personaje se basa en un "calendario" especificado. Es decir, el valor de esta expresión depende del resultado del cálculo del "calendario" relevante. Si no hay una asociación de "calendario", es equivalente a todos los "calendarios" incluidos. Por ejemplo: el campo de fecha es "5C" para indicar el primer día en el "calendario" asociado, o los últimos 5 días del primer día del mes. El día de la semana es "1C", lo que significa el primer día en el "calendario" asociado, o el día siguiente del primer día de la semana, es decir, el día siguiente del domingo (lunes).
Expresión de ejemplo
"0 0 12 * *?" Activado a las 12 del mediodía todos los días "0 15 10? * *" Apretado a las 10:15 am todos los días "0 15 10 * *?" Activado a las 10:15 am todos los días "0 15 10 * *? *" Activado a las 10:15 am todos los días "0 0/5 14 * *? 2005" activado a las 10:15 am todos los días "0 * 14 * *?" Activado a las 10:15 am todos los días "0 0/5 14 * *?" Activado a las 2:15 p.m. a 2:59 pm todos los días "0 0/5 14 * *?" Activado a las 2:15 p.m. a 2:55 pm todos los días "0 0/5 14,18 * *?" Activado a los 5 minutos todos los días de 2:15 p.m. a 2:55 pm todos los días "0 0/5 14,18 * *?" 0 0-5 14 * *? "0 10,44 14? 3 mié" 0 10 10 10 10 miércoles de marzo de cada año a las 2:10 y 2:44 pm cada año a las 2:10 y 2:44 pm cada año a las 2:10 y 2:44 pm cada año a las 2:10 y 2:44 pm cada año a las 15 10? * Mon-fri "0 15 10 15 *?" 0 15 10 15 *? "0 15 10 15 10 15 *?" 0 15 15 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1 10 ? * 6L 2002-2005 "se activó a las 10:15 am el último viernes de cada mes de 2002 a 2005" 0 15 10? * 6#3 "activado a las 10:15 am del tercer viernes de cada mes
El artículo anterior Spring integra cuarzo para implementar la programación de tareas de tiempo es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.