任务调度(3)- Spring Boot Quartz

Spring Boot 为使用 Quartz 调度程序提供了多种便利,包括 spring-boot-starter-quartz “Starter”。如果 Quartz 可用,则会自动配置调度程序(通过 SchedulerFactoryBean 抽象)。
以下类型的 Bean 会自动拾取并与调度程序关联:

  • JobDetail:定义一个特定的Job。 JobDetail 实例可以使用 JobBuilder API 构建。
  • Calendar
  • Trigger:定义何时触发特定作业。
    默认情况下,使用内存中的 JobStore。但是,如果 DataSource bean 在您的应用程序中可用并且相应地配置了 spring.quartz.job-store-type 属性,则可以配置基于 JDBC 的存储。

使用

1 添加依赖

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

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

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
    </dependency>

2 配置文件

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://xxx.xxx.xxx.xxx:3306/quartz?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
    username: username
    password: password

  quartz:
    jdbc:
      # 自动生成quartz需要的表
      initialize-schema: always
    #相关属性配置
    properties:
      org:
        quartz:
          scheduler:
            # 调度器实例名称
            instanceName: clusteredScheduler
            # 调度器实例ID自动生成
            instanceId: AUTO
          jobStore:
            # 调度信息存储处理类
            class: org.quartz.impl.jdbcjobstore.JobStoreTX
            # JDBC的驱动
            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
            # quartz相关表的前缀
            tablePrefix: QRTZ_
            # 是否将JobDataMap中的属性转为字符串存储
            useProperties: true
          threadPool:
            # 指定线程池实现类,对调度器提供固定大小的线程池
            class: org.quartz.simpl.SimpleThreadPool
            # 设置并发线程数量
            threadCount: 100
            # 指定线程优先级
            threadPriority: 5
    # quartz任务存储类型:jdbc或memory
    job-store-type: jdbc

3 添加config文件

    @Configuration
    public class QuartzConfig {
        @Bean
        public JobDetail myJob1Detail() {
            return JobBuilder
                    .newJob(TestJob1.class)
                    .withIdentity("myJob1")
                    .storeDurably()
                    .build();
        }

        @Bean
        public Trigger myJob1Trigger() {
            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/3 * * * * ?");
            return TriggerBuilder.newTrigger()
                    .forJob(myJob1Detail())
                    .withIdentity("myJob1Trigger")
                    .withSchedule(cronScheduleBuilder)
                    .build();
        }

        @Bean
        public JobDetail myJob2Detail() {
            return JobBuilder
                    .newJob(TestJob2.class)
                    .withIdentity("myJob2")
                    .storeDurably()
                    .build();
        }

        @Bean
        public Trigger myJob2Trigger() {
            CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/3 * * * * ?");
            return TriggerBuilder.newTrigger()
                    .forJob(myJob2Detail())
                    .withIdentity("myJob2Trigger")
                    .withSchedule(cronScheduleBuilder)
                    .build();
        }
    }

4 添加执行逻辑的Job

public class TestJob1 implements Job {
    
    @Override
    public void execute(JobExecutionContext jobExecutionContext) {
        // ..
    }
}


public class TestJob2 extends QuartzJobBean {
    @Override
    protected void executeInternal(JobExecutionContext context) {
        // ..
    }
}

通过这几步的配置就可以使用Spring Boot提供的Quartz Scheduler功能了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值