任务调度(3)- Spring Boot Quartz

任务调度(3)- Spring Boot Quartz,第1张

任务调度(3)- Spring Boot Quartz

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

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

    
        org.springframework.boot
        spring-boot-starter-quartz
    

    
        org.springframework.boot
        spring-boot-starter-jdbc
    

    
        mysql
        mysql-connector-java
    

    
        com.alibaba
        druid
    
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功能了

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5710237.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存