SpringBoot整合Quartz

pom依赖

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


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

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


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


        <!--支持通过jdbc连接数据库库-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
		

配置文件

spring:

  quartz:
    #相关属性配置
    properties:
      org:
        quartz:
          scheduler:
            instanceName: testScheduler
            instanceId: AUTO

          jobStore:
            # 默认存储在内存中,RAMJobStore快速轻便,但是当进程终止时,所有调度信息都会丢失;
            #此处配置通过事务存储数据库;2.5.6版本之后,配置JobStoreTX要报错,调整配置
            class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
            #            class: org.springframework.scheduling.quartz.LocalDataSourceJobStore
            #您需要为JobStore选择一个DriverDelegate才能使用。DriverDelegate负责执行特定数据库可能需要的任何JDBC工作
            # StdJDBCDelegate是一个使用“vanilla”JDBC代码(和SQL语句)来执行其工作的委托,用于完全符合JDBC的驱动程序
            driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
            #表前缀
            tablePrefix: QRTZ_
            #数据源别名,自定义
            dataSource: one
            #是否加入集群(集群时,一个任务只有一个服务实例执行)
            #设置为“true”以打开群集功能。如果您有多个Quartz实例使用同一组数据库表,则此属性必须设置为“true”,否则您将遇到破坏
            isClustered: true
            #调度实例失效的检查时间间隔
            clusterCheckinInterval: 10000
            #可以将“org.quartz.jobStore.useProperties”配置参数设置为“true”(默认为false),以指示JDBCJobStore将JobDataMaps中的所有值都作为字符串,
            #因此可以作为名称 - 值对存储而不是在BLOB列中以其序列化形式存储更多复杂的对象。从长远来看,这是更安全的,因为您避免了将非String类序列化为BLOB的类版本问题
            useProperties: false
          # quartz线程池配置
          threadPool:
            #实例化ThreadPool时,使用的线程类为SimpleThreadPool
            class: org.quartz.simpl.SimpleThreadPool
            #threadCount和threadPriority将以setter的形式注入ThreadPool实例
            #并发个数:如果只有几个工作每天触发几次 那么1个线程就可以,如果有成千上万的工作,每分钟都有很多工作 那么就需要50-100之间.
            #只有1到100之间的数字是非常实用的
            threadCount: 10
            #优先级 默认值为5
            threadPriority: 5
            #可以是“true”或“false”,默认为false
            threadsInheritContextClassLoaderOfInitializingThread: true

    #数据库方式
    job-store-type: jdbc
    # 关闭系统的时候,等待定时任务完成
    wait-for-jobs-to-complete-on-shutdown: true
    # 初始化后是否自动启动计划程序
    auto-startup: true
    # 延迟启动
    startup-delay: 5s
    jdbc:
      # SQL 初始化脚本中单行注释的前缀
      comment-prefix: --
      # 数据库架构初始化模式--never 从不进行初始化,always 每次都清空数据库进行初始化,embedded 只初始化内存数据库(默认值)
      initialize-schema: always
      # 用于初始化数据库架构的SQL文件的路径
    #      schema: classpath:database/mysql.sql
  datasource:
    url: jdbc:mysql://yourip/database?serverTimezone=GMT%2B8&characterEncoding=UTF-8&useSSL=false&
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    name: one
	

当前springboot版本为 2.6.3

如果spring boot 版本在2.5.7之前的 需要将 jobStore. class属性修改为 : org.quartz.impl.jdbcjobstore.JobStoreTX

配置类

@Configuration
public class TaskConfig {

    @Bean
    public JobDetailFactoryBean testTaskJob() {
        JobDetailFactoryBean jobDetail = new JobDetailFactoryBean();
        jobDetail.setName("test_task");
        jobDetail.setGroup("test_task_group");
        jobDetail.setJobClass(TestJob.class);
        jobDetail.setDurability(true);
        return jobDetail;
    }

    @Bean
    public CronTriggerFactoryBean testTaskJobTrigger() {
        CronTriggerFactoryBean trigger = new CronTriggerFactoryBean();
        trigger.setJobDetail(testTaskJob().getObject());
        // 每隔5s 触发
        trigger.setCronExpression("0/5 * * * * ? ");
        trigger.setName("testTaskJobTrigger");
        trigger.setMisfireInstruction(0);
        return trigger;
    }
}

任务详情


package com.tlj.quartz.service;

import lombok.extern.slf4j.Slf4j;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;

/**
 * @Author: tanglj
 * @Date: 2022/8/16
 * @Description:
 */
// 不允许并发执行
@DisallowConcurrentExecution
@Slf4j
public class TestJob extends QuartzJobBean {
    
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        log.info("执行任务啦");
    }
}
	
posted @ 2022-08-16 15:59  原来是晴天啊  阅读(1163)  评论(0编辑  收藏  举报