quartz的jar包:
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>1.8.5</version> </dependency>
spring-context.xml配置:
xmlns中加入
xmlns:task="http://www.springframework.org/schema/task"xsi中加入
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.2.xsd
声明定时器开关
<!-- 定时器开关--> <task:annotation-driven />
扫包的时候一定要扫到定时器的java类,我这里叫做 yjc.demo.task.SchedulerDemo.java
<context:component-scan base-package="yjc.demo.task"/>
测试代码
package yjc.demo.task; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; /** * Created by yangjiachang on 2016/7/21. */ @Component public class SchedulerDemo { /** * 每隔5秒执行一次 */ @Scheduled(fixedRate = 1000*5) public void test1(){ System.out.println("test1:"+System.currentTimeMillis()); } /** * 每隔5秒执行一次 */ @Scheduled(cron = "*/5 * * * * ?") public void test2(){ System.out.println("test2:"+System.currentTimeMillis()); } public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:spring-context.xml") ; } }
因为需要通过扫包注入到spring容器中,所以一定要有一个@componentz。
真正需要执行的定时任务是由@Scheduled注解声明的,可以通过cron表达式来触发任务。
以上是通过注解的方式完成spring整合quartz。
还有一种通过在xml配置文件中,配置job和tigger来声明定时任务,这种方式配置较多,比较繁琐,建议使用注解的方式简单易行。
最后简单介绍一下cron表达式
说明:
1)Cron表达式的格式:秒 分 时 日 月 周 年(可选)。
字段名 允许的值 允许的特殊字符
秒 0-59 , - * /
分 0-59 , - * /
小时 0-23 , - * /
日 1-31 , - * ? / L W C
月 1-12 or JAN-DEC , - * /
周几 1-7 or SUN-SAT , - * ? / L C #
年 (可选字段) empty, 1970-2099 , - * /
“?”字符:表示不确定的值
“,”字符:指定数个值
“-”字符:指定一个值的范围
“/”字符:指定一个值的增加幅度。n/m表示从n开始,每次增加m
“L”字符:用在日表示一个月中的最后一天,用在周表示该月最后一个星期X
“W”字符:指定离给定日期最近的工作日(周一到周五)
“#”字符:表示该月第几个周X。6#3表示该月第3个周五
2)Cron表达式范例:
每隔5秒执行一次:*/5 * * * * ?
每隔1分钟执行一次:0 */1 * * * ?
每天23点执行一次:0 0 23 * * ?
每天凌晨1点执行一次:0 0 1 * * ?
每月1号凌晨1点执行一次:0 0 1 1 * ?
每月最后一天23点执行一次:0 0 23 L * ?
每周星期天凌晨1点实行一次:0 0 1 ? * L
在26分、29分、33分执行一次:0 26,29,33 * * * ?
每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?