quartz(开源项目)
Quatz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz可以用来创建简单或为运行十个,百个,甚至是好几万个Jbs这样复杂的程序。Jobs可以做成标准的Java组件或EJBs。Quartz的最新版本为Quartz 2.3.0。
官网:http://www.quartz-scheduler.org/?
1)job - 任务 - 你要做什么事?
2)Trigger - 触发器 - 你什么时候去做?
3)Scheduler - 任务调度 - 你什么时候需要去做什么事?
pom.xml文件添加依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
1.自定义一个Job
/**
* 任务类
*/
@Component
public class QuartzDemo{
//任务
@Override
public void printTime() throws JobExecutionException {
System.out.println("现在时刻:"+new Date());
}
}
2.编写quartz配置类
@Configuration
public class QuartzConfig {
@Bean//job:干什么事
public MethodInvokingJobDetailFactoryBean methodInvokingJobDetailFactoryBean(
QuartzDemo quartzDemo){
MethodInvokingJobDetailFactoryBean JobDetailFactoryBean = new
MethodInvokingJobDetailFactoryBean();
JobDetailFactoryBean.setTargetObject(clearImgJob);
JobDetailFactoryBean.setTargetMethod("printTime");
return JobDetailFactoryBean;
}
@Bean//trigger:什么时候
public CronTriggerFactoryBean cronTriggerFactoryBean(
MethodInvokingJobDetailFactoryBean JobDetailFactoryBean){
CronTriggerFactoryBean triggerFactoryBean = new CronTriggerFactoryBean();
triggerFactoryBean.setCronExpression("0/1 * * * * ?");
triggerFactoryBean.setJobDetail(JobDetailFactoryBean.getObject());
return triggerFactoryBean;
}
@Bean//scheduler:什么时候干什么事
public SchedulerFactoryBean schedulerFactoryBean(
CronTriggerFactoryBean triggerFactoryBean){
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
schedulerFactoryBean.setTriggers(triggerFactoryBean.getObject());
return schedulerFactoryBean;
}
}
?3.编写启动类
@SpringBootApplication
public class QuartzTestApp {
public static void main(String[] args) {
SpringApplication.run(QuartzTestApp.class,args);
}
}
查看控制台?
?
运行启动类,观察控制台,可以发现每隔1秒会输出一次,说明每隔1秒自定义 Job被调用一次。?
?
Cron 表达式是一个字符串,分为 6 或 7 个域,每一个域代表一个含义
Cron 有如下两种语法格式:
(1)Seconds Minutes Hours Day Month Week Year
(2)Seconds Minutes Hours Day Month Week
1.结构
corn 从左到右(用空格隔开):秒 分 小时 月份中的日期 月份 星期中的日期 年份
2.cron表达式
?字段含义:
示例:?
??
“?”字符只在日期域和星期域中使用。它被用来指定“非明确的值”。
例如:
??????? 想在每月的20日触发调度0 0 0 20 * ?,而且只能使用如下写法:0/1 0 0 20 * ?。其中最后一位只能用?,而不能使??? 用*,因为*表示不管星期几都会触发恰好与20冲突。
前面介绍了cron表达式,但是自己编写表达式还是有一些困难的,我们可以借助一些 cron表达式在线生成器来根据我们的需求生成表达式即可。