Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo el cuarzo primaveral configura dinámicamente el tiempo

Cómo el cuarzo primaveral configura dinámicamente el tiempo

Cómo Spring Quartz configura dinámicamente el tiempo

1. Propósito: establecer dinámicamente el tiempo y activar las tareas correspondientes.

2. La arquitectura del sistema es struts+spring+hibernate.

3. Pasos de implementación:

Establecer la hora en la página;

Convertir la hora a cronexpression UNIX

Convertir la hora convertida La expresión regular se registra en la base de datos (también se puede escribir en un archivo xml, donde el proyecto debe registrarse en la base de datos);

Obtenga la expresión de regla de tiempo correspondiente de la base de datos;

Actualizar configuración de hora del activador de tarea;

Reprogramar trabajo.;- )

4. Detalles de implementación específicos:

1) Establecer la hora en la página.

Establece reglas de tiempo basadas en necesidades específicas del negocio. Tomando un proyecto como ejemplo, es necesario dividirlo en tres reglas: reglas mensuales, reglas semanales y reglas personalizadas.

1<tr>

2<th>Realizar esta tarea

3<TD style = "font-weight:bold;"& gt

4 & lthtml :radio propiedad = " cada qué " clase de estilo = " InputBorderNone " valor = " mensual " onclick = " changeStatus(este . valor) " & gt; cada mes

5 & lthtml: radio propiedad = " cada what " style class = " InputBorderNone " value = " semanal " onclick = " changeStatus(this . value)" & gt; semanal

6 & lthtml :radio property = " cada what " style class = " InputBorderNone " valor = " definido por el usuario " onclick = " cambiarEstado(este . valor)" & gt;Personalización

7 & lthtml:hidden property = " nombre del trabajo " valor = " comparar "/& gt;

8 & lt/TD & gt;

9 & lt/tr & gt

10

Cada mes, debes seleccionar el día del mes.

1 & lt; tr style = " display: " id = " whatweek " & gt>

2 & ltth & gtSeleccione el número de semanas

3 & ltTD style = " font-weight:bold;"& gt

4 & lthtml:select property =" semana " >>p>

5 & lthtml:option value ="1 " > 1 domingo

6 & lthtml:option value = " 2 " & gt; lunes

7 & lthtml:option value = " 3 " & gt; p>8 & lthtml:valor de opción = " 4 " & gt; miércoles

9 & lthtml:valor de opción = "5 " >jueves

10 & lt;html:valor de opción = " 6 ">Viernes

11<html:option value = "7">Sábado

12</html:select>

13< /TD>

14</tr>

15

Si está personalizado Sí, seleccione una fecha específica, como 2007-1-10.

Estas tres reglas deben establecer un momento.

1 & lt;tr & gt

2 & ltth & gthora de inicio

3 & ltTD style = " font-weight:bold;"& gt

4 & lthtml:select propiedad = " tipo de tiempo " styleId = " tipo " onchange = " cambios de estado 2 (este . valor)" & gt; " AM " & gt; mañana

6 & lthtml:option value = " PM " & gt; tarde

7 & lt/html:select & gt;

8 & lthtml:select property = " hora " styleId = " horas am " & gt;

9 & lthtml:option value = "1 " >1 & lt;/html:option & gt ;

10 & lt;html:valor de opción = " 2 " & gt; 2 & lt/html:opción & gt;

11 & lt;html:valor de opción = " 3 " >

13<html:valor de opción = "5">5</html:opción>

14<html:valor de opción = "6"> 6 & lt/html:opción & gt;

15 & lt;html:valor de opción = " 7 " & gt; 7 & lt/html:opción & gt; ">8</html:option>

17<html:option value = "9">9< /html:option>

18<html:option value="10 ">10</html:opción>

19<html :opción valor = " 11 " >11 & lt;/html:opción & gt;

20 & lthtml:opción valor ="12 " >12 & lt;/html:opción & gt;

p>

21 & lt;/html:seleccionar & gt;

22 & lthtml :select propiedad = " hora " id de estilo = " pm horas " estilo = " display:none " & gt>

23 & lthtml:option value ="13 " >13 & lt;/html:option; & gt;

24 & lthtml:valor de opción="14 " >14 & lt ;/html:opción>

p>

25 & lthtml:valor de opción="15 " >15 & lt;/html:opción & gt;

26 & lthtml:valor de opción="16 " >16 & lt;/ html:opción & gt;

27 & lthtml:opción valor ="17 " >17 & lt;/html:opción & gt;

28 & lthtml:opción valor =" 18 " >18 & lt;/html:opción & gt;

29 & lthtml:opción valor="19 " >19 & lt;/html:opción & gt;

30 & lthtml: valor de opción = " 20 " & gt; 20 & lt/html: opción & gt;

31 & lt; opción & gt;

32 & lthtml:valor de opción = " 22 " & gt; 22 & lt/html:opción & gt;

33 & lthtml:valor de opción = " 23 " & gt; 23 & lt/html:opción & gt;

34 & lthtml:opción valor = " 0 " & gt; 0 & lt/html:opción & gt;

35 & lt/html:select & gt;Puntos clave

36 & lthtml:text property = " minuto " nombre = " minuto " estilo = " ancho:20px; "valor = " 0 " onchange = " val time(this . value)"/& gt;minutos

37<html:text property = " second " name = " second " style = " width:20px;" val time(este . valor)"/& gt; segundos (un número entero entre 0 y 59)

38 & lt/TD & gt;

39 & lt/tr & gt ;

40

Está bien. Esto completa la configuración de nuestra página. : - )

Como mencionamos la última vez, nuestra página de configuración se ha completado y el siguiente paso es convertir la hora en una expresión Cron de Unix.

2) Convertir el tiempo en expresión Cron de Unix.

Se requiere ActionForm para asignar los datos del formulario de la página a Action y luego convertirlos en una expresión cron en Action:

1 formulario de programación formulario de programación = (formulario de programación);

2 Cadena nombre del trabajo = formulario de programación. getjobname();

3 Cadena cronExpression =

4 Cadena[]necesidades comunes = { formulario de programación obtener segundo(. ), formulario de programación. obtener minuto(), formulario de programación. obtener hora()};

5 String[]necesidades mensuales = {formulario de programación. obtener semana(), formulario de programación.

5 String[]necesidades mensuales = { formulario de programación. obtener semana(), formulario de programación getdayofmonth()};

5 p>

6 String necesidades semanales = programación. formulario . getday ofweek();

7 Cadena necesidades definidas por el usuario = formulario de programación .

8 Cadena cada qué = formulario de programación

9 //Obtener reglas de tiempo

10 expresión cron = cronexpconversion . getcron expresión (cada cosa, necesidades comunes,

11 necesidades mensuales, necesidades semanales, necesidades definidas por el usuario);

12

Definí una clase de regla para manejar las reglas de conversión (se puede usar si no está bien escrita)

1

2 /**

3 *La configuración de la página se convierte en una clase de conversión de expresión cron de UNIX.

4 * CronExpConversion

5 */

6 Clase pública CronExpConversion {

Siete

8 /* *

9 *Algoritmo de conversión de configuración de página a expresiones cron UNIX

10 * @param eachWhat

11 * @param Los requisitos comunes incluyen minutos, segundos y horas. .

12 * @param MonthlyNeeds contiene los días de la semana.

13 * @paramweeklyNeeds contiene los días de la semana.

14 * @paramsuserdefinedneeds contiene puntos de tiempo específicos.

15 * @return expresión cron

16 */

17 cadena estática pública convertDateToCronExp(String cada qué,

18 String[ ] commonNeeds, String[] MonthlyNeeds, String WeeklyNeeds,

19 String userDefinedNeeds) {

20 String cronEx =

21 String commons = necesidades comunes[0] +" "+necesidades comunes[1]+" "

22+necesidades comunes[2]+" ";

23 string dayOfWeek =

24 if ("Mensual".

Igual a (everyWhat)) {

25 //Por ejemplo: 6#3 (el sexto día = viernes, y "#3" = el tercer día

26 //mes )

27 días de la semana = necesidades mensuales[1]

28+carácter especial relacionado con cronex

29 .get(CronExRelated._ luego th)+mensual. necesita[ 0];

30 cronEx = (comunes

31+cronex relacionado. caracteres especiales. get(cronex relacionado._any)

32 + " "

33+caracteres especiales relacionados con cronex. get(cronex related._every)

34 + " " + díaDeLaSemana +" "). trim();

35 } else if("semanal". igual a (everyWhat)) {

36 dayOfWeek = WeeklyNeeds// 1

37 cronEx = (comunes

38+caracteres . especiales relacionados con cronex. get(relacionado con cronex._any)

39 + " "

4caracteres . especiales relacionados con cronex . get(cronex related._every)

41 + " " + díaDeLaSemana +" "). trim();

42 } else if("Definido por el usuario". Igual a (everyWhat)) {

43 String dayo fmonth = necesidades definidas por el usuario split("-"[. 2 ];

44 if(díadelmes. comienza con(" 0 "){

45 día del mes = día del mes . reemplazar primero(" 0 ", " ");

46 }

47 Cadena mes = necesidades definidas por el usuario split("-"[1];

48 if(mes. Comienza con(" 0 "){

49 mes = mes.replaceFirst( " 0 ", " ");

50 }

51 Año de cadena = necesidades definidas por el usuario split("-" [ 0];

52 // FIXME aún no agrega el error de cuarzo del año

53/* cronEx =(commons+day ofmonth+" "+month+" "

54+caracteres especiales relacionados con cronex. get(cronex related._any)

55 + " " + año). +día del mes+" "+mes+")

57+cronex relacionado. caracteres especiales. get(cronex relacionado.

_any)

58 + " " ).trim();

59 }

60 devuelve cronEx

61 }

62 }

63

Esto cambiará la configuración de tiempo de la página a una expresión Cron.

La última vez dijimos que habíamos cambiado la configuración de tiempo de la página a Cron Expression, registré las reglas de tiempo a continuación.

3) Registrar reglas de tiempo

Guardo reglas de tiempo en la base de datos para generar registros históricos, o las guardo en archivos XML. Por supuesto, también puede omitir este paso y colocar directamente las reglas convertidas en el activador de Quartz correspondiente.

4) Actualice la configuración de tiempo del activador de la tarea.

Este es un paso crítico y el más simple, y se puede lograr con un solo método.

Primero, necesitamos obtener un CronTriggerBean en el nombre del disparador.

En segundo lugar, inyectamos una nueva expresión a través del método setcronep(string cronep);

Finalmente, reprograme el trabajo y ¡OK!