SpringBoot使用Quartz实现代码

为什么需要Quartz

quartz:石英钟的意思,由OpenSymphony开源组织开发,

是java编写的,我们使用时需要导入依赖即可是一个当今市面上流行的高效的任务调度管理工具

所谓"调度"就是制定好的什么时间做什么事情的计划

我们使用过的最简单的调度方法就是:Timer

但是Timer的调度功能过于单一,只能是指定时间的延时调用和周期运行

而Quartz可以更详细的指定时间,进行计划调用

SpringBoot使用Quartz

pom依赖

下面展示 pom依赖

<!--  SpringBoot整合Quartz依赖  -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-quartz</artifactId>
</dependency>

quartz包,创建一个QuartzJob的类,实现Job接口

下面展示一些 内联代码片

public class QuartzJob implements Job {
    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        // 实现一个简单的任务做演示
        // 例如输出当前时间
        System.out.println("-------"+ LocalDateTime.now() +"--------");
    }
}

上面编写的是Job接口的实现类,要想运行还需要将它封装为JobDetail对象保存在Spring容器中

还有要创建一个Trigger设置要运行的时机,也保存到Spring容器中

在quartz包下,再创建一个QuartzConfig类,其中编写它们的调度绑定关系

这个格式是固定的,后面再需要绑定,直接套用即可

保存到Spring容器+绑定代码

下面展示 保存到Spring容器+绑定代码

// 要配置Quartz的调度器Scheduler
// 调度器由SpringBoot管理,所以就变成了配置Spring
@Configuration
public class QuartzConfig {
    // 配置的核心是向Spring容器保存一个job和保存一个Trigger

    // 创建一个封装Job对象的类型JobDetail
    // 使用@Bean注解标记的方法将这个对象保存到Spring容器
    @Bean
    public JobDetail showTime(){
        System.out.println("jobDetail保存到Spring容器");
        //newJob方法就是在绑定要运行的Job接口实现类,需要实现类的反射做参数
        return JobBuilder.newJob(QuartzJob.class)
                // 给当前JobDetail对象在调度环境中起名
                .withIdentity("dateTime")
                // 即使没有触发器绑定当前JobDetail对象,也不会被删除
                .storeDurably()
                .build();
    }

    // 下面是触发器的声明,也会保存到Spring容器中
    // 它能够设置job的运行时机
    @Bean
    public Trigger showTimeTrigger(){
        System.out.println("Trigger保存到Spring容器中");
        // 定义Cron表达式
        CronScheduleBuilder cron=
                CronScheduleBuilder.cronSchedule("0 0/2 * * * ?"");
        return TriggerBuilder.newTrigger()
                // 绑定要运行的JobDetail对象
                .forJob(showTime())
                // 为触发器起名
                .withIdentity("dateTrigger")
                // 绑定cron表达式
                .withSchedule(cron)
                .build();
    }
}

Quartz核心组件

在这里插入图片描述
任务:job

触发器:Trigger

调度器来配置\计划什么时间触发什么任务

简单来说就是调度器规定什么时间做什么事情

  • job(工作\任务):Quartz 实现过程中是一个接口,接口中有一个方法execute(执行的意思)

​ 我们创建一个类,实现这个接口,在方法中编写要进行的操作(执行具体任务)

​ 我们还需要一个JobDetail的类型的对象,Quartz每次执行job时

​ 会实例化job类型对象,去调用这个方法,JobDetail是用来描述Job实现类的静态信息,

​ 比如任务运行时在Quartz中的名称

  • Trigger(触发器):能够描述触发指定job的规则,分为简单触发和复杂触发

    简单触发可以使用SimplTrigger实现类.功能类似timer

    复杂触发可以使用CronTrigger实现类,内部利用cron表达式描述各种复杂的时间调度计划

  • Scheduler(调度器):一个可以规定哪个触发器绑定哪个job的容器

    在调度器中保存全部的Quartz 保存的任务

    SpringBoot框架下,添加Quartz依赖后,调度器由SpringBoot管理

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 Spring Boot 集成 Quartz实现代码: 1. 添加 Maven 依赖 ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> ``` 2. 创建 Quartz 配置类 ```java @Configuration public class QuartzConfig { @Bean public JobDetail sampleJobDetail() { return JobBuilder.newJob(SampleJob.class).withIdentity("sampleJob") .usingJobData("name", "World").storeDurably().build(); } @Bean public Trigger sampleJobTrigger() { SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule() .withIntervalInSeconds(10).repeatForever(); return TriggerBuilder.newTrigger().forJob(sampleJobDetail()) .withIdentity("sampleTrigger").withSchedule(scheduleBuilder).build(); } } ``` 3. 创建 Quartz Job 类 ```java @Component public class SampleJob implements Job { @Override public void execute(JobExecutionContext context) throws JobExecutionException { String name = context.getJobDetail().getJobDataMap().getString("name"); System.out.println("Hello " + name + "!"); } } ``` 4. 运行定时任务 ```java @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Autowired private Scheduler scheduler; @Autowired private Trigger sampleJobTrigger; @Autowired private JobDetail sampleJobDetail; @PostConstruct public void init() { try { scheduler.scheduleJob(sampleJobDetail, sampleJobTrigger); } catch (SchedulerException e) { e.printStackTrace(); } } } ``` 这样就可以实现一个简单的 Spring Boot 集成 Quartz 的定时任务了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值