springboot集成quartz,通过注解方式提供给业务调用

一、Quartz概述

 Quartz是一个完全由Java编写的开源任务调度的框架,通过触发器设置作业定时运行规则,控制作业的运行时间。其中quartz集群通过故障切换和负载平衡的功能,能给调度器带来高可用性和伸缩性。主要用来执行定时任务,如:定时发送信息、定时生成报表等等。

二、Quartz的体系结构简介:

Quartz框架主要核心组件包括调度器、触发器、作业。调度器作为作业的总指挥,触发器作为作业的操作者,作业为应用的功能模块。其关系如下图所示:
Job为作业的接口,为任务调度的对象;JobDetail用来描述Job的实现类及其它相关的静态信息;Trigger做为作业的定时管理工具,一个Trigger只能对应一个作业实例,而一个作业实例可对应多个触发器;Scheduler做为定时任务容器,是quartz最上层的东西,它提携了所有触发器和作业,使它们协调工作,每个Scheduler都存有JobDetail和Trigger的注册,一个Scheduler中可以注册多个JobDetail和多个Trigger。
在这里插入图片描述

1、Job

  Job是一个接口,只有一个方法void execute(JobExecutionContext context),被调度的作业(类)需实现该接口中execute()方法,JobExecutionContext类提供了调度上下文的各种信息。每次执行该Job均重新创建一个Job实例,如:

2、JobDetail

Quartz在每次执行Job时,都重新创建一个Job实例,所以它不直接接受一个Job的实例,相反它接收一个Job实现类,以便运行时通过newInstance()的反射机制实例化Job。因此需要通过一个类来描述Job的实现类及其它相关的静态信息,如Job名字、描述、关联监听器等信息,JobDetail承担了这一角色。JobDetail 用来保存我们作业的详细信息。一个JobDetail可以有多个Trigger,但是一个Trigger只能对应一个JobDetail,

1.  JobDetail jobDetail = new JobDetail("myJob","myGroup",DDNJob.class)    
2.  说明:    
3.  myJob:job 名     
4.  myGroup:job 组('null'时,使用缺省的组sched.DEFAULT_GROUP)     
5.  DDNJob.class:要被执行的Java类。

3、Trigger

Trigger是一个类,描述触发Job执行的时间触发规则。主要有SimpleTrigger和 CronTrigger这两个子类。当仅需触发一次或者以固定时间间隔周期执行,SimpleTrigger是最适合的选择;而CronTrigger则 可以通过Cron表达式定义出各种复杂时间规则的调度方案:如每早晨9:00执行,周一、周三、周五下午5:00执行等
CronTrigger使用示例:

CronTrigger cronTrigger = new CronTrigger("cronTrigger","triggerGroup2");  
try {  
    // setup CronExpression  
     CronExpression cexp = new CronExpression("0/5 * * * * ?");  
// Assign the CronExpression to CronTrigger  
     cronTrigger.setCronExpression(cexp);  
} catch (Exception e) {  
       e.printStackTrace();  
} 

4、Scheduler

Scheduler负责管理Quartz的运行环境,Quartz它是基于多线程架构的,它启动的时候会初始化一套线程,这套线程会用来执行一些预置的作业。Trigger和JobDetail可以注册到Scheduler中;Scheduler可以将Trigger绑定到某一JobDetail中,这样当Trigger触发时,对应的Job就被执行。 Scheduler拥有一个SchedulerContext,它类似于ServletContext,保存着Scheduler上下文信息,Job和Trigger都可以访问SchedulerContext内的信息。Scheduler使用一个线程池作为任务运行的基础设施,任务通过共享线程池中的线程提高运行效率

SchedulerFactory schedulerFactory = new StdSchedulerFactory();  
    // Retrieve a scheduler from schedule factory  
    Scheduler scheduler = schedulerFactory.getScheduler();// schedule a job with JobDetail and Trigger  
     scheduler.scheduleJob(jobDetail, simpleTrigger);  
    // start the scheduler  
    scheduler.start(); 

5、quartz表信息

  1. qrtz_blob_triggers : 以Blob 类型存储的触发器。
  2. qrtz_calendars:存放日历信息, quartz可配置一个日历来指定一个时间范围。
  3. qrtz_cron_triggers:存放cron类型的触发器。
  4. qrtz_fired_triggers:存放已触发的触发器
  5. qrtz_job_details:存放一个jobDetail信息。
  6. qrtz_job_listeners:job监听器。
  7. qrtz_locks: 存储程序的悲观锁的信息(假如使用了悲观锁)。
  8. qrtz_paused_trigger_graps:存放暂停掉的触发器。
  9. qrtz_scheduler_state:调度器状态。
  10. qrtz_simple_triggers:简单触发器的信息。
  11. qrtz_trigger_listeners:触发器监听器。
  12. qrtz_triggers:触发器的基本信息。

三、通过注解方式提供给业务调用

1、对外注解接口
在这里插入图片描述

2、quartzConfig
在这里插入图片描述

3、启动调度器
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
非常好的问题!Spring Boot 集成 Quartz 可以让我们轻松地实现任务调度和定时任务。下面是一个简单的示例代码: 1. 首先,我们需要在 pom.xml 文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> ``` 2. 接下来,我们需要创建一个 Quartz 配置类,用于配置 Quartz 的相关参数。示例代码如下: ```java @Configuration public class QuartzConfig { @Autowired private ApplicationContext applicationContext; @Bean public SchedulerFactoryBean schedulerFactoryBean() { SchedulerFactoryBean schedulerFactoryBean = new SchedulerFactoryBean(); schedulerFactoryBean.setApplicationContext(applicationContext); schedulerFactoryBean.setOverwriteExistingJobs(true); schedulerFactoryBean.setAutoStartup(true); return schedulerFactoryBean; } @Bean public JobDetailFactoryBean jobDetailFactoryBean() { JobDetailFactoryBean jobDetailFactoryBean = new JobDetailFactoryBean(); jobDetailFactoryBean.setJobClass(MyJob.class); jobDetailFactoryBean.setDurability(true); return jobDetailFactoryBean; } @Bean public CronTriggerFactoryBean cronTriggerFactoryBean() { CronTriggerFactoryBean cronTriggerFactoryBean = new CronTriggerFactoryBean(); cronTriggerFactoryBean.setJobDetail(jobDetailFactoryBean().getObject()); cronTriggerFactoryBean.setCronExpression("0/5 * * * * ?"); return cronTriggerFactoryBean; } @Bean public Scheduler scheduler() { return schedulerFactoryBean().getScheduler(); } } ``` 3. 然后,我们需要创建一个 Quartz Job 类,用于执行具体的任务。示例代码如下: ```java public class MyJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { // 执行具体的任务 System.out.println("Hello, Quartz!"); } } ``` 4. 最后,我们需要在 Spring Boot 应用程序中启动 Quartz。示例代码如下: ```java @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 好了,以上就是 Spring Boot 集成 Quartz 的基本步骤。希望能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值