一、@Scheduled注解方式实现
- 首先有一个springboot项目,然后添加依赖
<!-- 添加scheduled座标 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
- 在含有定时方法的类前添加如下注解
@Configuration
@EnableScheduling
public class TimingTask {
@Scheduled(fixedRate = 5000)//单位是ms
private void configureTasks() {
System.err.println("执行静态定时任务时间: " + new Date());
}
@Scheduled(cron = "0/5 * * * * ?")//表达式见下面
private void configureTasks2() {
System.out.println("执行静态定时任务时间: " + new Date());
}
}
- cron表达式解释
参考文章:https://blog.csdn.net/weixin_43564627/article/details/93857252 - 启动
- 控制台输出
二、quartz定时器实现
1.普通实现方式 - job–任务----你要做什么事
- trigger–触发器–你什么时候去做
- scheduler–任务调度—你什么时候需要去做什么事
依赖
<!-- quartz座标 -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
</dependency
(1),定义任务类
定义任务类,实现job接口
/*
* 定义任务类
*
*
* */
public class QuartzDemo implements Job {
//任务类触发时执行的方法
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Exeute............."+new Date());
}
(2),创建执行
注意第二步有两种执行方法,第一种适合定义简单的定时器,第二种适合较为复杂的定时器
public class QuartzMain {
public static void main(String[] args) throws SchedulerException {
// 1.创建Job对象,你要做什么事
JobDetail job = JobBuilder.newJob(QuartzDemo.class).build();
// 2.创建trigger对象,在什么时间做
/*
* 简单的trigger出发时间,通过quartz提供一个方法来完成简单的重复调用cron trigger按照cron的表达式来给定触发时间
*/
/*
* Trigger trigger =
* TriggerBuilder.newTrigger().withSchedule(SimpleScheduleBuilder.
* repeatSecondlyForever()) .build();
*/
Trigger trigger = TriggerBuilder.newTrigger().withSchedule(CronScheduleBuilder.cronSchedule("0/2 * * * * ?"))
.build();
// 创建scheduler对象,在什么时间做什么事?
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.scheduleJob(job, trigger);
// 启动
scheduler.start();
}
}
相关的解释:
SimpleScheduleBuilder相关接口的解释:
repeatSecondlyForever():每秒执行一次,一直执行下去
repeatSecondlyForever(5):每5秒执行一次,一直执行下去
RepeatSecondlyForTotalCount (5,9):每9秒执行一次,一共执行5次
(3),执行main方法,即可运行
Exeute.............Sun Mar 29 18:46:04 CST 2020
Exeute.............Sun Mar 29 18:46:06 CST 2020
Exeute.............Sun Mar 29 18:46:08 CST 2020
Exeute.............Sun Mar 29 18:46:10 CST 2020
Exeute.............Sun Mar 29 18:46:12 CST 2020
2,springboot整合quartz
(1),创建一个springboot-maven项目
(2),添加依赖
<!-- quartz座标 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
(3),编写任务类
/*
* 任务类
*
* */
public class quartz implements Job{
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// TODO Auto-generated method stub
System.out.println("执行任务==========="+new Date());
}
(4),编写配置类
/*
* quartz的配置类:
*
* */
@Configuration
@EnableScheduling
public class quartzConfig {
/*
* 1. 创建Job对象
* */
@Bean
public JobDetailFactoryBean jobDetailFactoryBean() {
JobDetailFactoryBean factory = new JobDetailFactoryBean();
//关联我们自己的任务类
factory.setJobClass(quartz.class);
return factory;
}
/*
* 2.创建trigger对象
* 简单的trigger
* */
@Bean
public SimpleTriggerFactoryBean simpleTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean) {
SimpleTriggerFactoryBean factory = new SimpleTriggerFactoryBean();
//关联JobDetail对象
factory.setJobDetail(jobDetailFactoryBean.getObject());
//设置触发时间,该参数表示执行的一个毫秒数
factory.setRepeatInterval(2000);
//设置重复次数
factory.setRepeatCount(10);
return factory;
}
/*
* 3.创建scheduler对象
* */
@Bean
public SchedulerFactoryBean schedulerFactoryBean(SimpleTriggerFactoryBean simpleTriggerFactoryBean) {
SchedulerFactoryBean factory = new SchedulerFactoryBean();
//关联trigger
factory.setTriggers(simpleTriggerFactoryBean.getObject());
return factory;
}
(5),右击启动
执行任务===========Mon Mar 30 15:07:19 CST 2020
执行任务===========Mon Mar 30 15:07:21 CST 2020
执行任务===========Mon Mar 30 15:07:23 CST 2020
执行任务===========Mon Mar 30 15:07:25 CST 2020
执行任务===========Mon Mar 30 15:07:27 CST 2020
执行任务===========Mon Mar 30 15:07:29 CST 2020
执行任务===========Mon Mar 30 15:07:31 CST 2020
相关的demo见本人上传的资源