Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便。
所需jar包(我在项目中实际用到的)
commons-collections-3.1.jar
quartz-1.6.0.jar
spring-context-support-3.2.6.jar
web.xml配置
<!-- 前端控制器配置 -->
<servlet>
<servlet-name>chapter2</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/application-context.xml
/WEB-INF/config/chapter2-servlet-front.xml
/WEB-INF/config/quatz-task.xml
</param-value>
</init-param>
<!-- 容器启动时初始化该servlet -->
<load-on-startup>1</load-on-startup>
</servlet>
quartz-task.xml配置
<!-- 调度器 -->
<bean name="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<!-- 通过applicationContextSchedulerContextKey属性配置spring上下文 -->
<property name="applicationContextSchedulerContextKey">
<value>applicationContext</value>
</property>
</bean>
<!--加载数据库任务 -->
<bean id="loadTask" class="task.LoadTask" init-method="loadTask" >
<property name="globalEnable" value="true"/>
<property name="project" value="/"/>
<property name="runTaskId" value=""/>
</bean>
LoadTask:
private Boolean globalEnable;
private String project;
private String runTaskId;
public void loadTask() throws Exception{
JobDetail jobDetail = new JobDetail();
jobDetail.setName("test task");
jobDetail.setGroup(Scheduler.DEFAULT_GROUP);
jobDetail.setJobClass(Class.forName("task.DoTask"));
//
CronTrigger cronTrigger = new CronTrigger("cron_" + 0,Scheduler.DEFAULT_GROUP, jobDetail.getName(),Scheduler.DEFAULT_GROUP);
cronTrigger.setCronExpression("0 */5 * * * ?");
scheduler.scheduleJob(jobDetail, cronTrigger);
}
DoTask:
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
public class DoTask extends QuartzJobBean{
@Override
protected void executeInternal(JobExecutionContext arg0)throws JobExecutionException {
System.out.println("get here : DoTask!");
}
}
// "0 0 0/2 * * ?"
每隔
2
个小时触发
// "0 0 12 * * ?"
每天中午
12
点触发
// "0 15 10 ? * *"
每天上午
10
:
15
触发
"0 15 10 * * ?"
每天上午
10
:
15
触发
// "0 15 10 * * ? *"
每天上午
10
:
15
触发
// "0 15 10 * * ? 2005"
2005
年的每天上午
10
:
15
触发
// "0 * 14 * * ?"
在每天下午
2
点到下午
2
:
59
期间的每
1
分钟触发
// "0 0/5 14 * * ?"
在每天下午
2
点到下午
2
:
55
期间的每
5
分钟触发
// "0 0/5 14,18 * * ?"
在每天下午
2
点到
2
:
55
期间和下午
6
点到
6
:
55
期间的每
5
分钟触发
// "0 0-5 14 * * ?"
在每天下午
2
点到下午
2
:
05
期间的每
1
分钟触发
// "0 10,44 14 ? 3 WED"
每年三月的星期三的下午
2
:
10
和
2
:
44
触发
// "0 15 10 ? * MON-FRI"
周一至周五的上午
10
:
15
触发
// "0 15 10 15 * ?"
每月
15
日上午
10
:
15
触发
// "0 15 10 L * ?"
每月最后一日的上午
10
:
15
触发
// "0 15 10 ? * 6L"
每月的最后一个星期五上午
10
:
15
触发
// "0 15 10 ? * 6L 2002-2005"
2002
年至
2005
年的每月的最后一个星期五上午
10
:
15
触发
// "0 15 10 ? * 6#3"
每月的第三个星期五上午
10
:
15
触发