SpringBoot -- Quartz

SpringBoot -- Quartz

Quartz是一个定时任务的调度框架,涉及到的主要概念有以下几个:

  • Scheduler:调度器,所有的调度都由它控制,所有的任务都由它管理。

  • Job:任务,定义业务逻辑。

  • JobDetail:基于Job,进一步封装。其中关联一个Job,并为Job指定更详细的信息。

  • Trigger:触发器,可以指定给某个任务,指定任务的触发机制。

1 springboot----Quartz简单集成

1.1 依赖引入

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

1.2 定义任务Job

任务 extends QuartzJobBean

@Slf4j
public class FirstJob extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        String now = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
        System.out.println("当前时间:"+now);
    }
}
@Slf4j
public class SecondJob extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        String now = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
        System.out.println("secondJob执行 当前时间:"+now);
    }
}

1.3 QuartzConfig配置类

@Configuration
public class QuartzConfig {

    private static final String ID = "Job";

    @Bean
    public JobDetail jobDetail01(){
        return JobBuilder.newJob(FirstJob.class)
                .withIdentity(ID + "01")
                .storeDurably()
                .build();
    }

    @Bean
    public SimpleScheduleBuilder simpleScheduleBuilder(){
        return SimpleScheduleBuilder.simpleSchedule()
                .withIntervalInSeconds(5)
                .withRepeatCount(100);
    }

    @Bean
    public CronScheduleBuilder cronScheduleBuilder(){
        return CronScheduleBuilder.cronSchedule("0/5 * * * * ? *");
    }

    @Bean
    public Trigger trigger(){
        return TriggerBuilder.newTrigger()
                .forJob(jobDetail01())
                .withIdentity(ID + "01Trigger")
                .withSchedule(simpleScheduleBuilder())
                .build();
    }
}

1.4 yml文件配置

spring:
  quartz:
    auto-startup: true
    job-store-type: jdbc
    startup-delay: 0
    wait-for-jobs-to-complete-on-shutdown: true
    overwrite-existing-jobs: false
    scheduler-name: myQuartzScheduler

2 Quartz任务持久化到MySQL

Quartz默认使用RAMJobStore存储方式将任务存储在内存中,除了这种方式还支持使用JDBC将任务存储在数据库,为了防止任务丢失,我们一般会将任务存储在数据库中。

这里使用mysql进行存储,在quartz的源码包中找到文件tables_mysql_innodb.sql,然后在客户端进行运行sql文件。

2.1 依赖导入

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

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

2.2 导入Quartz数据库sql

image-20210713193735815

如果springboot容器中有Trigger的springbean,则会自动使用JDBC持久化到该数据库中。

posted @ 2021-07-13 19:40  MJoeBoyae  阅读(245)  评论(0编辑  收藏  举报