今天五四青年节,闲着无聊,分享一下Spring中的Quartz时间任务调度机制。
当然使用Quartz的前提是在Spring框架中的。
第一,向工程中添加quartz-all-1.6.0.jar,在spring-framework-2.*中的lib\quarta\目录下就有,可能版本有点差异,但并影响Quartz的使用
第二,新建你的 EmailReportJob.java 文件,代码如下:
package com.inqgen.hxy.common;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class EmailReportJob extends QuartzJobBean {
private static int i=1;
@Override
protected void executeInternal(JobExecutionContext context)
throws JobExecutionException {
System.out.println(new java.util.Date());
System.out.println((i++)+imageDatabase);
}
private String imageDatabase;
public void setImageDatabase(String imageDatabase){
this.imageDatabase = imageDatabase;
}
}
这个类EmailReportJob需得继承org.springframework.scheduling.quartz.QuartzJobBean,并实现其executeInternal方法,若你有Servic层的话,也可以将String imageDatabase换成你所需要的Service,其注入将会在applicationContext-config.xml中配置~
第三,配置applicationContext-config.xml
1.自己所写的EmailReportJob.java类,是注入到org.springframework.scheduling.quartz.JobDetailBean类中的jobClass属性中,map的配置方式及上步骤中所提到的(若有Servic层的话)Service层的注入方式,
但写法可能就为<entry key="imageDatabase" ref="Servic" />而这个Servic必须要受Spring容器管理;若有多个Map的话,要在com.inqgen.hxy.common.EmailReportJob中写入其的setter方法
<bean id="reportJob" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.inqgen.hxy.common.EmailReportJob" />
<property name="jobDataAsMap">
<map>
<entry key="imageDatabase" value="imageDatabase" />
</map>
</property>
</bean>
所配置的JobDetailBean,本人管它叫【工作任务】。
2.配置TriggerBean在这里我们叫他【时间触发器】
<bean id="simpleReportTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail">
<ref bean="reportJob" />
</property>
<property name="startDelay">
<value>1000</value>
</property>
<property name="repeatInterval">
<value>2000</value>
</property>
</bean>
startDelay是触发前等待的时间(为毫秒ms),repeatInterval是触发的间隔时间jobDetail,是将我们配置的【工作任务】添加到【时间触发器】中,上述的写法的意思是,每隔2秒触发一次,再延缓1秒才执行
SimpleTriggerBean是一种简单的间隔触发执行代码的一个时间触发器,也可以写成CronTriggerBean,如下
------------------------------------------------
<bean id="checkImagesTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="reportJob" />
<property name="cronExpression" value="0/5 * * * * ?" />
</bean>
jobDetail的配置和上面的一样,cronExpression就有所不同了,上述的写法的意思是,每隔5秒触发一次
3.配置【调度工厂】
<bean id="scheduler"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="simpleReportTrigger" />
<ref local="checkImagesTrigger" />
</list>
</property>
<property name="quartzProperties">
<props>
<prop key="org.quartz.threadPool.threadCount">5</prop>
</props>
</property>
</bean>
把2步骤中所配置的【时间触发器】注入到triggers中;
quartzProperties是启动的线程数。
OK!This end!~
大功告成!
-------------------------------------------------
下面是介绍cronExpression的一些含义~
Expression
Meaning
"0 0 12 * * ?"
Fire at 12pm (noon) every day
"0 15 10 ? * *"
Fire at 10:15am every day
"0 15 10 * * ?"
Fire at 10:15am every day
"0 15 10 * * ? *"
Fire at 10:15am every day
"0 15 10 * * ? 2005"
Fire at 10:15am every day during the year 2005
"0 * 14 * * ?"
Fire every minute starting at 2pm and ending at 2:59pm, every day
"0 0/5 14 * * ?"
Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day
"0 0/5 14,18 * * ?"
Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day
"0 0-5 14 * * ?"
Fire every minute starting at 2pm and ending at 2:05pm, every day
"0 10,44 14 ? 3 WED"
Fire at 2:10pm and at 2:44pm every Wednesday in the month of March.
"0 15 10 ? * MON-FRI"
Fire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday
"0 15 10 15 * ?"
Fire at 10:15am on the 15th day of every month
"0 15 10 L * ?"
Fire at 10:15am on the last day of every month
"0 15 10 ? * 6L"
Fire at 10:15am on the last Friday of every month
"0 15 10 ? * 6L"
Fire at 10:15am on the last Friday of every month
"0 15 10 ? * 6L 2002-2005"
Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005
"0 15 10 ? * 6#3"
Fire at 10:15am on the third Friday of every month
分享到:
相关推荐
Spring框架提供了两种方式来处理定时任务:Java内置的`Timer`类和第三方库OpenSymphony的Quartz。下面将详细介绍这两种实现方式。 ### 1. Java `Timer` 类 Java `java.util.Timer` 类是Java标准库中的一个轻量级...
【标题】:“flutter-quarta-feira:curso Flutter quarta-feira一个名媛” 【描述】:这个课程专注于Flutter,Google推出的开源跨平台移动应用开发框架。"Quarta-feira"在葡萄牙语中意为星期三,可能指的是该课程...
【标题】"DesenvolvimentoSoftwareQuarta:软件开发软件-Quarta-feira-Noite" 提到的是一个关于软件开发的项目,可能是一个特定的课程、研讨会或者是团队开发活动,发生在周三晚上,即“Quarta-feira-Noite”。...
描述中提及的 "列表" 和 "项目清单" 暗示这个项目可能包含有条理的数据或任务列表,而 "斜体列出项目" 和 "粗体清单项目" 暗示了样式的应用,可能是为了强调或区分不同的条目。 标签 "PHP" 明确指出此项目与 PHP...
【标题】"Generation-Java-14-Aula:Quarta aula de Java com和IDE Eclipse" 指向的是一个关于Java编程语言的第四次教学课程,特别关注使用Eclipse集成开发环境(IDE)进行编程。这个课程可能是针对初学者或有一定...
Um banco开发主管Saques eDepósitos。西马克·德·塞西尔·西姆图尔尼西斯·马克西姆·马克·纳西卡2圣保罗·西德·西图尔·西穆尔图尼西斯。准直筒形的反式(Saque ouDepósito),反式接收器或códigoda conta或...
回购周三 这个存储库并在GitHub上进行初始测试很棒的家伙们是最酷的班级家伙,他们学习如何在系统中调整git mexento,这使该工具的神秘化三星大流行正在阻碍所有社会发展
"Aula"在葡萄牙语中意为“课程”,"quarta-noite"意为“星期三晚上”,这可能是一个教学项目或者是某次编程课程的作业,其中"main"通常表示主要或主干分支,就像在Git版本控制系统中常见的那样。 在PHP开发中,了解...
)讲师Vinicius Cardoso Garcia教授( ) 合作者VanilsonBurégio教授( )学科等级:IN1062-西皮马斯配送中心3 年级:IF1007-信息摘要4本地信息通报中心,霍尔里奥斯: segunda(17:00-18:40) e quarta(18...
帮助念珠祈祷的场所 网站信息 色彩调色板 #EAC102-黄色调-光彩的奥秘 #ED1C24-红色调-悲伤的奥秘 #7898CF-蓝色调-快乐的奥秘 ...Mistérios Gloriosos na quarta-feira, sábado e domingo. 非常重要的链接
信息学科: CIÊNCIADE DADOS 直径: QUARTA-FEIRA 佩里奥多: MANHÃEdson Melo de Souza教授,理学硕士电子邮件: CurrículoAcadêmico: ://lattes.cnpq.br/2641658716558510 LinkedIn): Instagram: Youtube...
Dia: Quarta-Feira(Pré-aula) 佩里奥多:诺伊特 Descrição 奈斯semestre teremos嗯从头desafio呐construção做Projeto,ONDEvocêsirãoconstruir嗯Sistema的WEB发表呐AWSËversionando没有Github上。 O ...
C实验室 集成了5种语言的编程语言(编程语言/ Sistemas硬件... Quarta: Lab4:Vetores,Matrizes,弦乐 Quarta / Quinta: 实验5:庞特罗斯,结构 金塔: 实验6:阿维蒂达·德·维索·阿奎迪沃斯 Sexta 普罗瓦 实验室
quarta_controller.php quinta_controller.php sabado_controller.php segunda_controller.php sexta_controller.php terca_controller.php alert_controller.php backoffice_controller.php ...