在项目工程中,很多时候我们都需要定时来处理一些任务,简单的方法是利用Quartz框架,下面我们来看看这个框架怎么简单使用吧!
首先,在项目中添加依赖:
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency>
我们开始写一个简单的例子:simpleJob.java
代码如下:
package com.test.schedule;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* Created by _qingfeng on 2017/9/18.
*/
@Component
public class simpleJob {
public void executeWork(){
System.out.println("---------------");
System.out.println("--定时任务启动--"+new Date().toString());
//...
//任务处理
//...
System.out.println("--定时任务结束--");
System.out.println("---------------");
}
}
我们在
XML
配置文件中配置一下:
<bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="simpleTrigger"/>
</list>
</property>
<property name="autoStartup" value="false"/>
</bean>
simpleTrigger:
<!-- simpleTrigger-->
<bean id="simpleTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="simpleJobDetail"/>
<property name="cronExpression" value="0 0 0/1 * * ?"/><!-- 每一分钟执行一次 -->
</bean>
<bean id="simpleJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="simpleJob"/>
<property name="targetMethod" value="executeWork"/>
<property name="concurrent" value="false"/>
<!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 -->
</bean>
执行结果:
附录:
cronExpression的配置说明如下,具体使用以及参数请百度一下
字段 允许值 允许的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或者 JAN-DEC , - * /
星期 1-7 或者 SUN-SAT , - * ? / L C #
年(可选) 留空, 1970-2099 , - * /
- 区间
* 通配符
? 你不想设置那个字段
具体例子:
CRON表达式 含义
"0 0 13 * * ?" 每天中午十三点触发
"0 20 11 ? * *" 每天早上11:20触发
"0 20 11 * * ?" 每天早上11:20触发
"0 20 11 * * ? *" 每天早上11:20触发
"0 20 11 * * ? 2017" 2017年的每天早上11:20触发
"0 * 15 * * ?" 每天从下午3点开始到3点59分每分钟一次触发
"0 0/5 15 * * ?" 每天从下午3点开始到3:55分结束每5分钟一次触发
"0 0/5 15,19 * * ?" 每天的下午3点至3:55和7点至7点55分两个时间段内每5分钟一次触发
"0 0-10 15 * * ?" 每天15:00至15:05每分钟一次触发
"0 10,55 15 ? 5 MON" 五月的每周一的15:10和15:55触发
"0 20 11 ? * MON-FRI" 每个周一、周二、周三、周四、周五的11:20触发