Recentemente, é necessário implementar tarefas de execução programadas em projetos, como o cálculo cronometrado dos pontos de membros, chamando interfaces de terceiros etc. Como o projeto usa a estrutura do Spring, ele é introduzido aqui em conjunto com a estrutura da mola.
Escrevendo dever de casa
Isto é, Pojo comum, da seguinte maneira:
pacote com.pcmall.task; importar org.slf4j.logger; importar org.slf4j.loggerFactory; public class Taska {private static logger logger = loggerFactory.getLogger (Taska.class); public void Taska1 () {para (int i = 0; i <100; i);}} public void TaskA2 () {for (int i = 0; i <100; i ++) {System.out.println ("----- a2 ----"+i);}}} Defina tarefas específicas no arquivo de configuração da primavera
<? xml versão = "1.0" coding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3 http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id = "taska"> </i bean> <bean id = "taskb"> </shean> <i bean> <bean iD = "Taska"/Taskb "> </bean> value = "TaskA1"> </propriedade> <propriedade name = "concorrente" value = "false"> </propriedade> </bean> <bean id = "taskJoba2"> <propriedades name = "TargetObject" ref = "Taska"> </propriedade> <nome do nome = "TargetMethod" = "Taska2"> </</</propriedade </propriedade> <nome da propriedade = "TargetMethod" = "Taska2"> </</</</propriedade </propriedade> <Nome da propriedade = "TargetMetMod" = "Taska2"> <//</</</propriedade </propriedade> <Nome = "Nome =" Taska " id = "taskjobb1"> <propriedade name = "TargoBject" ref = "taskb"> </property> <propriedade name = "TargetMethod" value = "taskB1"> </propriedade> <names name = "concurrent" value = "false"> </propriedade> </bean> <bean id = "jobbbbb "/false"> </propriedade> </bean> <bean = "jobbbb "/names =" Nomeb) name = "TargetMethod" value = "taskB2"> </propriedade> <propriedade name = "concorrente" value = "false"> </propriedade> </bean> <bean id = "taskA1Trigger"> <names name = "JobDetail"> <refênse bEan = "TaskJoba1"/</propriedade> <nome do nome = crone "> CRX"> <fren = " ? </value> </ousetwer> </bean> <bean id = "taska2Trigger"> <propriedade name = "jobDetail"> <ref bean = "taskJoba2"/> </property> <names cronexpression "> <value> 0 0/2 * * * * *? name = "JobDetail"> <ref Bean = "TaskJOBB1"/> </Property> <propriedade name = "cronexpression"> <value> 0 0 0/1 * * *? name = "cronexpression"> <Value> 0 0/2 * * *? </value> </propriedade> </bean> <bean id = "scheduler" class = "org.springframework.schedulening.quartz.schedulerFactoryBean"> Nome da propriedade = "Trigers"> <list> /> <ref Bean = "TaskB1Trigger"/> <ref Bean = "TaskB2Trigger"/> </list> </Property> </bean> </ Beans>
Perceber
Um gatilho só pode acionar um trabalho, mas um trabalho pode ser acionado por vários gatilhos, o que causará problemas de simultaneidade desta vez. No Quartz, se você não quiser executar o mesmo trabalho simultaneamente, poderá implementar um Statefuljob em vez de um emprego. Se você usar o MethodInvingJobDetailFactoryBean na primavera, poderá fazê -lo definindo a propriedade Concurrent = "false".
Nota final
Os benefícios do uso de quartzo na primavera em vez de um único aplicativo incluem:
Colocar todas as configurações de agendamento de tarefas no mesmo local facilita a manutenção das tarefas.
A codificação de emprego só é possível, o gatilho e o agendador podem ser definidos por configuração
Você pode usar o pojo Java Bean para executar trabalhos sem implementar a interface de emprego
Uso detalhado de expressões Cron
Caracteres especiais permitidos por valores permitidos de campo
0-59 segundos, - * /
0-59, - * /
Horário 0-23, - * /
Data 1-31, - *? / Lwc
Meses 1-12 ou janeiro-dezembro,- * /
Semana 1-7 ou Sol-Sáb,- *? / LC #
Ano (opcional) deixar em branco, 1970-2099, - * /
exemplo:
0/5 * * * *? : Executar a cada 5 segundos
O caractere "" é usado para especificar todos os valores. Por exemplo: "" significa "por minuto" no campo de minutos.
O "?" O personagem é usado apenas nos campos de data e dia da semana. É usado para especificar "valores não explicativos". É útil quando você precisa especificar algo por um desses dois domínios. Você entenderá olhando para o exemplo abaixo.
Os dois elementos da data do mês e a data da semana são mutuamente exclusivos juntos. Defina um ponto de interrogação para indicar que você não deseja definir esse campo.
O caractere "-" é usado para especificar um intervalo. Por exemplo: "10-12" significa "10, 11, 12".
O caractere "" "é usado para especificar um valor adicional. Por exemplo: "Mon, Wed, Fri" significa "Seg, quarta -feira, sexta -feira" no campo da semana.
O caractere "/" é usado para especificar o incremento. Por exemplo: "0/15" no segundo campo significa 0, 15, 30 e 45 segundos por minuto. "5/15" representa 5, 20, 35 e 50 por hora no campo minuto. O símbolo "" é antes "/" (como:/10) é equivalente a 0 antes de "/" (como: 0/10). Lembre-se de uma essência: cada campo numérico de uma expressão é um conjunto de valores máximos e mínimos, como: o conjunto de campos de segundos e minutos é 0-59, os campos de data são 1-31 e os campos do mês são 1-12. O personagem "/" pode ajudá -lo a obter o valor numérico correspondente em cada campo de caracteres. Por exemplo: "7/6" será acionado apenas em julho, quando o domínio do mês, e não significa todo mês de junho.
L é uma palavra omitida para 'Última' que pode representar os campos do dia do mês e do dia da semana, mas o significado é diferente nos dois campos, por exemplo, o campo do dia do mês representa o último dia de um mês. Se o campo do dia da semana significa '7' ou 'Sat', se o número for precedido pelo campo do dia da semana, significa os últimos dias de um mês, como '6l', significa a última sexta-feira de um mês.
O personagem "W" apenas permite que o campo de data apareça. Esse personagem é usado para o dia útil mais recente da data especificada. Por exemplo: se você escrever "15W" no campo Data, significa: o dia útil mais recente deste mês no dia 15 deste mês. Portanto, se o dia 15 for sábado, a missão será acionada no dia 14. Se 15 for melhor domingo, a tarefa será acionada na segunda -feira, ou seja, o dia 16. Se você preencher "1W" no campo Data, mesmo que o 1º seja sábado, a tarefa será acionada apenas na próxima segunda -feira, ou seja, o 3º. O dia de trabalho mais recente especificado pelo personagem "W" não pode ser atravessado para o mês. O personagem "W" só pode ser usado com um valor separado e não pode ser um campo numérico, como: 1-15W está errado.
"L" e "W" pode ser usado de maneira conjunta no campo Data, e LW representa o dia útil da última semana do mês.
O personagem "#" só pode aparecer no domínio do dia da semana. Esse personagem é usado para especificar um certo dia do mês. Por exemplo: "6#3" significa sexta -feira da terceira semana do mês (6 significa sexta -feira, 3 significa semana 3). "2#1" significa segunda -feira da primeira semana do mês. "4#5" significa quarta -feira da quinta semana.
O personagem "C" pode aparecer nos campos de data e dia da semana. Esse personagem depende de um "calendário" especificado. Ou seja, o valor dessa expressão depende do resultado do cálculo do "calendário" relevante. Se não houver associação de "calendário", é equivalente a todos os "calendários" incluídos. Por exemplo: o campo Data é "5C" para indicar o primeiro dia no "calendário" associado ou nos últimos 5 dias do primeiro dia do mês. O dia da semana é "1C", que significa o primeiro dia no "calendário" associado, ou no dia seguinte do primeiro dia da semana, ou seja, no dia seguinte do domingo (segunda -feira).
Exemplo de expressão
"0 0 12 * *?" Desencadeado às 12h todos os dias "0 15 10? * *" Gatido às 10h15 todos os dias "0 15 10 * *?" Acionado às 10:15 todos os dias "0 15 10 * *? *" Apareceu às 10:15 todos os dias "0 0/5 14 * *? 2005" acionado às 10:15 todos os dias "0 * 14 * * *?" Acionado às 10:15 todos os dias "0 0/5 14 * *?" Acionado às 14:15 às 14:59 todos os dias "0/5 14 * *?" Acionado às 14:15 às 14:55 todos os dias "0 0/5 14,18 * *?" Acionado aos 5 minutos todos os dias, das 14:15 às 14:55 todos os dias "0 0/5 14,18 * *?" 0 0-5 14 * *? "0 10,44 14? 3 Casa-se" 0 10 10 10 10 quartas-feiras de março de cada ano às 14:10 e 14:44 a cada ano às 14:10 e 14:44 a cada ano às 14:10 e 14:44 a cada ano às 14:10 e 14:44 a cada ano às 15 10 10? * Seg-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 "Aparecido às 10:15 da última sexta-feira de cada mês de 2002 a 2005" 0 15 10? * 6#3 "acionado às 10:15 na terceira sexta -feira de cada mês
O artigo acima que a primavera integra para implementar a programação de tarefas de tempo é todo o conteúdo que eu compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.