- 使用spring中自带的定时执行器
- 开启定时器 在启动类上当然也可以在其他地方,要保证能注入到ioc容器中
@SpringBootApplication
@EnableScheduling//开启定时器
public class HisApplication {
public static void main(String[] args) {
SpringApplication.run(HisApplication.class, args);
}
}
- 开始自定义任务逻辑使用@Scheduled注在方法上,类上可以使用@Configuration
/**创建定时器任务
* */
@Configuration//主要是用于标记是一个配置类,兼备component的效果
public class TaskJop {
/**@Scheduled是开启一个定时器任务
* fixedRate 表示任务之间的时间间隔开始时间的间隔
* fixedDelay 是任务执行之间的时间间隔 本次任务结束到下次任务开始
* joptest类是任务
* Scheduled是调度 cron是调度条件
* */
@Scheduled(cron = "0/5 * * * * *")
private void joptest(){
System.err.println("执行定时器任务"+ LocalDateTime.now());
}
}
- 使用quartz做任务调度器
- 导入依赖
<!--定时器依赖-->
<!--quartz定时调度依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
- 创建任务和调用
/** 定义一个任务 quartzJob类
- 实现任务调度的接口 可以被调用
- - */
@Configuration
public class QuartzJob implements SchedulingConfigurer {
/**设置任务和调用器
* */
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
scheduledTaskRegistrar.addTriggerTask(
()->System.err.println(LocalDateTime.now()+"哈哈"),
triggerContext -> {
return new CronTrigger("0/8 * * * * * ")
.nextExecutionTime(triggerContext);
});
}
}
- addTriggerTask是任务
- triggerContext是调度时间
- 实现springboot定时任务
1 使用Scheduled定时器
2 整合Quartz定时器任务框架 - 使用Scheduled定时器
- 添加坐标
<!--添加Scheduled坐标-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.14.RELEASE</version>
</dependency>
- 编写任务类
/**Scheduled定时任务
* 该类不属于任何层使用@Component来标识
*
* */
@Component
public class ScheduledDemo {
/** 定时任务方法
* @Scheduled:设置定时任务 将一个方法设置成一个可以执行的任务
* 在这注解中通过一个cron属性来设置触发时间
* cron是一个表达式 就是触发任务时间的字符串
*
* */
@Scheduled(cron = "0/5 * * * * ?")
public void scheduledMethod(){
System.err.println("定时器触发了scheduled");
}
}
- 开启定时器在启动类上
@SpringBootApplication
@EnableScheduling
public class DemoApplication {
- cron表达式
- cron是一个字符串 用于表示时间的 分为6个或是7个域
- 时间位置格式是 秒 分钟 小时 天 月 周 [年]
s 秒 0-59
min 分钟 0-59
h 小时 0-23
d 天 1-31
M 月 1-12
y 年 可选 1970-2099
星期 1-7 1是周日
特殊符号含义:
* 可以用在所有字段中 表示任意时间
?无意义的占位符 通常用在星期的字段中
- 在两个值范围之内
/ 间隔
- springboot整合quartz定时任务框架
- 块日子
- 名称解释
1 job 任务 你要做什么事情
2 Trigger 触发器 你什么时候去做
3 Scheduler 任务调度 你什么时候去做什么事情 - 实例
- 添加依赖
<!--添加Scheduled坐标-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>4.3.14.RELEASE</version>
</dependency>
<!--quartz-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.2.1</version>
<exclusions>
<exclusion>
<artifactId>slf4j-api</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.12.RELEASE</version>
</dependency>
-创建任务类job
/** job类
* */
public class QuartzDemo implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
System.err.println("quartz框架"+ LocalTime.now());
}
}
-创建一个对quartz框架配置的配置类
** Quartz 配置类
* 第一步配置 job任务对象
* 第二步 配置Trigger 触发器对象
* 第三步实现任务调度 Scheduler
* */
@Configuration
public class QuartzConfig {
//创建实例化出JobDetailFactoryBean对象
@Bean
public JobDetailFactoryBean jobDetailFactoryBean(){
JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean();
//将编写的任务类设置到这个任务工厂中,这就是为什么编写的任务类没有进行依赖注入
jobDetailFactoryBean.setJobClass(QuartzDemo.class);
return jobDetailFactoryBean;
}
//配置Trigger对象 就是你什么时候执行触发, 也就是触发的条件是什么
//方法参数是将实例化出的任务对象
@Bean
public CronTriggerFactoryBean cronTriggerFactoryBean(JobDetailFactoryBean jobDetailFactoryBean){
CronTriggerFactoryBean cronBean = new CronTriggerFactoryBean();
//将任务类实例化和触发器进行绑定
cronBean.setJobDetail(jobDetailFactoryBean.getObject());
//设置触发时间
cronBean.setCronExpression("0/5 * * * * ?");
return cronBean;
}
//配置创建Scheduler对象 就是该怎么执行执行什么事情
@Bean
public SchedulerFactoryBean schedulerFactoryBean(CronTriggerFactoryBean cronTriggerFactoryBean){
SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean();
//将设置好的触发器本scheduler对象进行绑定
schedulerFactoryBean.setTriggers(cronTriggerFactoryBean.getObject());
return schedulerFactoryBean;
}
}
- 启动类记得加上@EnableScheduling
— java定时器
- quartz
定时器分为三个角色 任务 执行器 调度器
任务来将任务交给调度器 调度器来通过执行器来执行