SpringBoot工程集成Quartz

SpringBoot工程集成Quartz

一、Quartz简介

  Quartz是一个完全由 Java 编写的开源作业调度框架,为在 Java 应用程序中进行作业调度提供了简单却强大的机制。它允许程序开发人员根据时间的间隔来调度作业。实现了作业和触发器的多对多的关系,还能把多个作业与不同的触发器关联。

二、Quartz核心思想

  • Job 任务的接口,所有任务都需要实现这一接口,此接口中只有一个execute方法;
  • JobDetail 表示一个具体的可执行的任务,Job是这个可执行程调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略。
  • Trigger 触发器,代表一个调度参数的配置,什么时候去调。
  • Scheduler 代表一个调度容器,一个调度容器中可以注册多个 JobDetail 和 Trigger。当 Trigger 与 JobDetail 组合,就可以被 Scheduler 容器调度了。

三、集成Quartz

1、POM依赖导入

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

2、JOB接口实现

public class DemoJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("Hello world!:" + jobExecutionContext.getJobDetail().getKey()+ LocalDateTime.now());
    }
}

3、任务线程

public class QuartzThread extends Thread {

    private String name;

    public QuartzThread(String name) {
        this.name = name;
    }

    @SneakyThrows
    @Override
    public void run() {
        super.run();
        SchedulerFactory schedulerFactory = new StdSchedulerFactory();
        Scheduler scheduler = schedulerFactory.getScheduler();
        // 创建HelloworldJob的JobDetail实例,并设置name/group
        JobDetail jobDetail = JobBuilder.newJob(DemoJob.class)
                .withIdentity("demoJob","demoJobGroup1")
                //JobDataMap可以给任务传递参数
                .usingJobData("job_param","job_param1")
                .build();
        // 创建Trigger触发器设置使用cronSchedule方式调度
        String str1 = "2020-10-20 15:22:59";
        String str2 = "2020-10-20 15:24:00";
        Trigger trigger = TriggerBuilder.newTrigger()
                .withIdentity("demoTrigger","demoTriggerGroup1")
                .usingJobData("job_trigger_param","job_trigger_param1")
                .startAt(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(str1))
                .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMilliseconds(500).repeatForever())
                .endAt(new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse(str2))
				// .withSchedule(CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
                .build();
        // 注册JobDetail实例到scheduler以及使用对应的Trigger触发时机
        scheduler.scheduleJob(jobDetail,trigger);
        // 启动scheduler
        scheduler.start();
    }
}

4、运行结果

Hello Quartz!:demoJobGroup1.demoJob 2020-10-20T15:22:59.009
Hello Quartz!:demoJobGroup1.demoJob 2020-10-20T15:23:09.002
Hello Quartz!:demoJobGroup1.demoJob 2020-10-20T15:23:19.001
Hello Quartz!:demoJobGroup1.demoJob 2020-10-20T15:23:29
Hello Quartz!:demoJobGroup1.demoJob 2020-10-20T15:23:39.001
Hello Quartz!:demoJobGroup1.demoJob 2020-10-20T15:23:49
Hello Quartz!:demoJobGroup1.demoJob 2020-10-20T15:23:59

四、其他关键说明

1、任务的启动与关闭

调度器实例化后,它就能够启动,等待执行和关闭。需要注意的是一旦调度器调用 了shutdown 方法关闭后,如果不重新实例化,它就不会启动了。触发器在调度器未启动时,或是终止状态时,都不会被触发。

2、触发器Trigger

  常用的触发器有SimpleTrigger和CronTrigger,SimpleTrigger可以满足的调度需求是:在具体的时间点执行一次,或者在具体的时间点执行,并且以指定的间隔重复执行若干次。CronTrigger通常比SimpleTrigger更有用,如果需要基于日历的概念而不是按照SimpleTrigger的精确指定间隔进行重新启动的作业启动计划。使用CronTrigger,可以指定号时间表,例如“每周五中午”或“每个工作日和上午9:30”,甚至“每周一至周五上午9:00至10点之间每5分钟”和“1月份的星期五”。

  • 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、付费专栏及课程。

余额充值