什么是Quartz?
Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用。Quartz是一个完全由java编写的开源作业调度框架。不要让作业调度这个术语吓着你。尽管Quartz框架整合了许多额外功能, 但就其简易形式看,你会发现它易用得简直让人受不了!。
方法一:调用execute()方法
首先在pom文件中导入quartz的包
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
实现org.quartz.Job接口,且在execute()方法中写业务逻辑!
public class HelloQuartz implements Job{
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// TODO Auto-generated method stub
//打印当前的执行时间 例如 2017-11-23 00:00:00
Date date = new Date();
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("现在的时间是:"+ sf.format(date));
//具体的业务逻辑
if(sf.format(date).equals("2019-05-14 10:29:00")) {
System.out.println("当前时间进行中");
}
}
调用withIntervalInSeconds()方法,告诉quartz多少秒执行一次
SimpleTrigger trigger =TriggerBuilder.newTrigger().withIdentity("myTrigger").startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).repeatForever())
.build();//withIntervalInSeconds(1)每秒执行一次
如果不调用withIntervalInSeconds()方法,也可以使用cron表达式的方式去执行。http://cron.qqe2.com/ 会帮你生成你想要的执行时间。
public static void main(String[] args) throws SchedulerException {
//创建一个jobDetail的实例,将该实例与HelloQuartz Class绑定
JobDetail jobDetail = JobBuilder.newJob(HelloQuartz.class).withIdentity("myJob").build();
//创建一个Trigger触发器的实例,定义该job立即执行,并且每2秒执行一次,一直执行
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity("cronTrigger")
.withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ? ")).build();//通过表达式的形式来设置执行时间
//创建schedule实例
StdSchedulerFactory factory = new StdSchedulerFactory();
Scheduler scheduler = factory.getScheduler();
scheduler.start();
scheduler.scheduleJob(jobDetail,cronTrigger);
}
效果展示
方法二:注解的方式 @EnableScheduling和@Scheduled
先在SpringbootApplication.java启动的时候加入@EnableScheduling来开启任务注解
@SpringBootApplication
@EnableScheduling
public class SpringbootApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
}
在对应的方法上加入调度的注解即可@Scheduled(cron="0/1 * * * * ?")每秒钟执行一次
@Scheduled(cron="0/1 * * * * ?")
@Override
public void quartz() {
System.out.println("执行中");
}