Quartz有四个核心概念:
Job:是一个接口,只定义一个方法 execute(JobExecutionContext context),在实现接口的 execute 方法中编写所需要定时执行的 Job(任务)
Double slongitude = Double.valueOf(jobExecutionContext.getJobDetail().getJobDataMap().get("slongitude").toString());
JobDetail:Quartz 每次调度 Job 时,都重新创建一个 Job 实例,因此它不接受一个 Job 的实例,相反它接收一个 Job 实现类(JobDetail,描述 Job 的实现类及其他相关的静态信息,如 Job 名字、描述、关联监听器等信息),以便运行时通过 newInstance() 的反射机制实例化 Job。
rigger:是一个类,描述触发 Job 执行的时间触发规则,主要有 SimpleTrigger 和 CronTrigger 这两个子类。当且仅当需调度一次或者以固定时间间隔周期执行调度,SimpleTrigger 是最适合的选择;而 CronTrigger 则可以通过 Cron 表达式定义出各种复杂时间规则的调度方案:如工作日周一到周五的 15:00 ~ 16:00 执行调度等。
Scheduler:调度器就相当于一个容器,装载着任务和触发器,该类是一个接口,代表一个 Quartz 的独立运行容器,Trigger 和 JobDetail 可以注册到 Scheduler 中,两者在 Scheduler 中拥有各自的组及名称,组及名称是 Scheduler 查找定位容器中某一对象的依据,Trigger 的组及名称必须唯一,JobDetail 的组和名称也必须唯一(但可以和 Trigger 的组和名称相同,因为它们是不同类型的)。Scheduler 定义了多个接口方法,允许外部通过组及名称访问和控制容器中 Trigger 和 JobDetail。
1.导入pom依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
2.开启定时任务
@EnableScheduling注解
//java fhadmin.cn
@EnableScheduling
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
3.新建一个job
@Slf4j
public class MyJob implements Job {
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
try {
executeTask(jobExecutionContext);
} catch (Exception e) {
e.printStackTrace();
}
}
//java fhadmin.cn
private static void executeTask(JobExecutionContext jobExecutionContext) throws SchedulerException {
//JobExecutionContext 类提供了调度应用的一些信息;
//Job 运行时的信息保存在 JobDataMap 实例中。
JobKey key = jobExecutionContext.getJobDetail().getKey();
System.out.println(new Date()+"->"+key.toString()+"定时任务正在执行");
}
}
4.构建JobDetail rigger ,把Trigger 和 JobDetail 可以注册到 Scheduler 中
//fhrom fhadmin.cn
@Configuration
public class QuartzManager {
// public static final String JOB1="job1";
// public static final String GROUP1="group1";
/**默认每个星期凌晨一点执行*/
//public static final String DEFAULT_CRON="0 0 1 ? * L";
/**默认5秒执行一次*/
// public static final String DEFAULT_CRON="*/5 * * * * ?";
/**
* 任务调度
*/
private Scheduler scheduler;
@Bean
public Scheduler scheduler() throws SchedulerException {
SchedulerFactory schedulerFactoryBean = new StdSchedulerFactory();
this.scheduler = schedulerFactoryBean.getScheduler();
return schedulerFactoryBean.getScheduler();
}
/**
* 开始执行定时任务
*/
public void startJob(String name,String group,String time) throws SchedulerException {
startJobTask(scheduler,name,group,time);
scheduler.start();
}
/**
* 启动定时任务
* @param scheduler
*/
private void startJobTask(Scheduler scheduler,String name ,String group,String time) throws SchedulerException {
//对于身份
JobDetail jobDetail= JobBuilder.newJob(MyJob.class).withIdentity(name,group).build();
System.out.println("jobDetail:-------------"+jobDetail);
String DEFAULT_CRON="*/"+time+" * * * * ?";
// SimpleScheduleBuilder CronScheduleBuilder 用于构建Scheduler,定义任务调度的时间规则
CronScheduleBuilder cronScheduleBuilder=CronScheduleBuilder.cronSchedule(DEFAULT_CRON);
//触发器
CronTrigger cronTrigger=TriggerBuilder.newTrigger().withIdentity(name,group)
.withSchedule(cronScheduleBuilder).build();
scheduler.scheduleJob(jobDetail,cronTrigger);
}
/**
* 获取Job信息
* @param name
* @param group
*/
public String getjobInfo(String name,String group) throws SchedulerException {
TriggerKey triggerKey=new TriggerKey(name,group);
System.out.println("triggerKey:"+triggerKey);
CronTrigger cronTrigger= (CronTrigger) scheduler.getTrigger(triggerKey);
return String.format("time:%s,state:%s",cronTrigger.getCronExpression(),
scheduler.getTriggerState(triggerKey).name());
}
/**
* 修改任务的执行时间
* @param name
* @param group
* @param cron cron表达式
* @return
* @throws SchedulerException
*/
public boolean modifyJob(String name,String group,String cron) throws SchedulerException{
Date date=null;
TriggerKey triggerKey=new TriggerKey(name, group);
CronTrigger cronTrigger= (CronTrigger) scheduler.getTrigger(triggerKey);
String oldTime=cronTrigger.getCronExpression();
if (!oldTime.equalsIgnoreCase(cron)){
CronScheduleBuilder cronScheduleBuilder=CronScheduleBuilder.cronSchedule(cron);
CronTrigger trigger=TriggerBuilder.newTrigger().withIdentity(name,group)
.withSchedule(cronScheduleBuilder).build();
date=scheduler.rescheduleJob(triggerKey,trigger);
}
return date !=null;
}
/**
* 暂停所有任务
* @throws SchedulerException
*/
public void pauseAllJob()throws SchedulerException{
scheduler.pauseAll();
}
/**
* 暂停某个任务
* @param name
* @param group
* @throws SchedulerException
*/
public void pauseJob(String name,String group)throws SchedulerException{
JobKey jobKey=new JobKey(name,group);
JobDetail jobDetail=scheduler.getJobDetail(jobKey);
if (jobDetail==null) {
return;
}
scheduler.pauseJob(jobKey);
}
/**
* 恢复所有任务
* @throws SchedulerException
*/
public void resumeAllJob()throws SchedulerException{
scheduler.resumeAll();
}
/**
* 恢复某个任务
*/
public void resumeJob(String name,String group)throws SchedulerException {
JobKey jobKey=new JobKey(name,group);
JobDetail jobDetail=scheduler.getJobDetail(jobKey);
if (jobDetail==null) {
return;
}
scheduler.resumeJob(jobKey);
}
/**
* 删除某个任务
* @param name
* @param group
* @throws SchedulerException
*/
public void deleteJob(String name,String group)throws SchedulerException{
JobKey jobKey=new JobKey(name, group);
JobDetail jobDetail=scheduler.getJobDetail(jobKey);
if (jobDetail==null) {
return;
}
scheduler.deleteJob(jobKey);
}
}
5.编写Controller
通过调用接口 可以开始定时任务 结束定时任务 获取任务信息
//fhadmin.cn
@RestController
@RequestMapping("/quartz")
public class ModifyCronController {
@Autowired
private QuartzManager quartzManager;
@GetMapping("/modify")
public String modify(@RequestParam("job")String job, //job的名称
@RequestParam("group")String group,//job的组
@RequestParam("time")String time //执行定时任务的步长
) throws SchedulerException {
// quartzManager.pauseJob(QuartzManager.JOB1,QuartzManager.GROUP1);
quartzManager.startJob(job,group,time);
String s = quartzManager.getjobInfo(job, group);
System.out.println("job:"+s);
return "ok";
}
}
相关推荐
Spring Boot 配置 Quartz 定时任务(csdn)————程序
在Spring Boot应用中整合Quartz定时任务是一种常见的需求,它可以帮助我们执行周期性的后台任务,如数据同步、报表生成等。Spring Boot与Quartz的结合提供了便捷的配置方式,特别是通过YAML(YAML Ain't Markup ...
Spring Boot简化了Spring应用的初始搭建以及开发过程,提供了开箱即用的功能,而Quartz则是一个强大的任务调度库,常用于实现定时任务。 Spring Boot是一个基于Spring框架的快速开发工具,它通过预配置的starter ...
Spring Boot作为一个轻量级的Java框架,提供了与各种定时任务库集成的能力,其中Quartz是一个广泛应用的开源作业调度框架。本篇文章将详细探讨如何在Spring Boot项目中整合Quartz,并通过MySQL数据库实现定时任务的...
# 基于Spring Boot和Quartz的定时任务管理系统 ## 项目简介 本项目是一个基于Spring Boot和Quartz框架的定时任务管理系统,旨在提供一个灵活、高效的任务调度解决方案。系统支持从Excel配置文件中读取任务信息,并...
### 定时任务配置 1. **引入依赖**:在pom.xml中添加Quartz或Spring Task的依赖,确保定时任务库已加入项目。 2. **编写定时任务类**:在Java源码目录下创建一个定时任务类,例如`ScheduledTask.java`,并使用`@...
当我们结合 Spring Boot 和 Quartz,我们可以构建一个强大的定时任务管理系统,这在许多业务场景中非常有用,比如数据清理、报告生成、定期发送邮件等。 首先,让我们深入理解一下Spring Boot如何与Quartz集成。在...
在本文中,我们将深入探讨如何在Spring Boot 2.3版本中集成Quartz定时任务,并实现其持久化到数据库,以便支持集群环境。这个过程的关键在于配置Quartz Scheduler,设置数据库连接,以及确保任务在多节点环境中能够...
本项目名为“schedule-job”,是基于Spring Boot框架与Quartz库构建的分布式任务调度系统,它允许开发者方便地定义、管理和执行定时任务。 【Spring Boot基础知识】 Spring Boot是由Pivotal团队提供的全新框架,其...
在Spring Boot应用的配置文件(`application.properties`或`application.yml`)中,我们可以设置全局的定时任务配置。例如,我们可以设置一个固定的延迟时间让定时任务开始执行: ```properties spring.task....
通过以上步骤,你可以在Spring中成功配置并运行多个Quartz定时任务。记得在你的应用启动时启动Scheduler,以便Quartz能够按照预定的时间表执行任务。同时,你可以通过调整JobDetail和Trigger的属性,灵活地控制任务...
通过整合SpringBoot和Quartz,我们可以利用Spring的自动配置能力,方便地在Spring应用中集成定时任务功能。 二、Quartz动态配置 1. 引入依赖:首先,在`pom.xml`文件中引入SpringBoot的SpringBoot-starter-quartz...
这个特性极大地简化了Java应用中的定时任务配置。 `@Scheduled`是Spring Framework的`org.springframework.scheduling.annotation`包下的一个注解,它允许我们将方法标记为计划任务,这些任务将在指定的时间间隔或...
总结,Spring Boot集成Quartz定时器能够方便地创建和管理定时任务,同时利用Spring的依赖注入,使得Job可以灵活地调用其他服务或组件。这种方式使得我们的任务更加模块化和易于维护。在实际开发中,根据项目需求,...
SpringBoot提供了对Quartz的自动配置支持,所以只需要引入`spring-boot-starter-quartz`模块即可。 2. 配置Quartz:在application.properties或application.yml文件中,可以设置Quartz的一些基本属性,如线程池大小...
总之,结合Spring Boot、Quartz和邮件服务,我们可以构建出强大的定时任务系统,自动从数据库提取数据,生成报表,并将结果以邮件的形式发送给指定的接收者。这样的系统在许多业务场景中都有广泛的应用,例如日常...
在SpringBoot中定义定时任务,我们创建一个实现了`org.springframework.scheduling.Trigger`和`org.springframework.scheduling.TaskExecutor`接口的类,或者直接使用Quartz的`CronTrigger`或`SimpleTrigger`。...
Spring Quartz定时任务所需要的6个jar包,找到6个可是不容易哦。commons-collections.jar.zip+commons-logging.jar+jta.jar+log4j-1.2.14.jar.zip+quartz-all-1.6.0.jar+spring-2.0.6.jar
为了实现动态配置定时任务,我们可以利用SpringBoot的配置文件(如`application.yml`或`application.properties`)来存储定时任务的配置信息,然后在运行时读取这些配置并更新Quartz的任务。 ```yml quartz: jobs:...