springboot整合quartz集群环境实现动态定时任务配置原

weiqinshian      2022-02-11     771

关键词:

最近做了一个spring boot 整合 quartz  实现 动态定时任务配置,在集群环境下运行的 任务。能够对定时任务,动态的进行增删改查,界面效果图如下:

 

 

 

1. 在项目中引入jar

 

2. 将需要的表导入数据库

 官网上有不同数据库的脚本,找到对应的,导入即可

 

 

 3. java 代码

 

将quartz 的相关配置文件,配置为暴露bean,方便后期引用。

有一处关键的地方,就是注入spring 上下文,这是一个坑。

如果,不注入spring 上下文,那么新添加的定时任务job,是新new 的一个线程,和spring没有任何关系,在job 中也调用不了spring 注入的service方法。

 

 

要注入spring上下文,必须通过该方式,实例化job

 

@Configuration
public class DruidDBConfig {
    @Primary
    @Bean(name = "dataSource")
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }

 

 

4. 配置在集群环境中运行

isClustered 属性设置为true ,相当于告诉quartz,当前处于集群环境。

  /**
     * 设置quartz属性
     * 
     * @author XW
     * @create_date 2016年12月28日
     * @return Properties
     */

    public Properties quartzProperties() {
        Properties prop = new Properties();

        // org.quartz.scheduler.instanceName属性可为任何值,用在 JDBC JobStore
        // 中来唯一标识实例,但是所有集群节点中必须相同。
        prop.put("quartz.scheduler.instanceName", "ServerScheduler");
        // instanceId 属性为 AUTO即可,基于主机名和时间戳来产生实例 ID。
        prop.put("org.quartz.scheduler.instanceId", "AUTO");

        //
        // Quartz内置了一个“更新检查”特性,因此Quartz项目每次启动后都会检查官网,Quartz是否存在新版本。这个检查是异步的,不影响Quartz项目本身的启动和初始化。
        // 设置org.quartz.scheduler.skipUpdateCheck的属性为true来跳过更新检查
        prop.put("org.quartz.scheduler.skipUpdateCheck", "false");

        //
        prop.put("org.quartz.scheduler.jobFactory.class", "org.quartz.simpl.SimpleJobFactory");

        // org.quartz.jobStore.class属性为 JobStoreTX,将任务持久化到数据中。因为集群中节点依赖于数据库来传播
        // Scheduler 实例的状态,你只能在使用 JDBC JobStore 时应用 Quartz 集群。
        // 这意味着你必须使用 JobStoreTX 或是 JobStoreCMT 作为 Job 存储;你不能在集群中使用 RAMJobStore。
        prop.put("org.quartz.jobStore.class", "org.quartz.impl.jdbcjobstore.JobStoreTX");
        prop.put("org.quartz.jobStore.driverDelegateClass", "org.quartz.impl.jdbcjobstore.StdJDBCDelegate");
        prop.put("org.quartz.jobStore.dataSource", "quartzDataSource");
        prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");
        // isClustered属性为 true,你就告诉了Scheduler实例要它参与到一个集群当中。这一属性会贯穿于调度框架的始终
        prop.put("org.quartz.jobStore.isClustered", "true");

        //
        // clusterCheckinInterval属性定义了Scheduler实例检入到数据库中的频率(单位:毫秒)。Scheduler查是否其他的实例到了它们应当检入的时候未检入;
        // 这能指出一个失败的 Scheduler 实例,且当前 Scheduler 会以此来接管任何执行失败并可恢复的 Job。
        // 通过检入操作,Scheduler 也会更新自身的状态记录。clusterChedkinInterval 越小,Scheduler
        // 节点检查失败的 Scheduler 实例就越频繁。默认值是 15000 (即15 秒)
        prop.put("org.quartz.jobStore.clusterCheckinInterval", "60000");
        prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
        prop.put("org.quartz.threadPool.threadCount", "5");
        prop.put("org.quartz.dataSource.quartzDataSource.driver", "com.mysql.jdbc.Driver");
        prop.put("org.quartz.dataSource.quartzDataSource.URL", datasourceurl);
        prop.put("org.quartz.dataSource.quartzDataSource.user", username);
        prop.put("org.quartz.dataSource.quartzDataSource.password", password);
        prop.put("org.quartz.dataSource.quartzDataSource.maxConnections", "10");
        return prop;
    }

 

springboot整合quartz实现动态的创建或删除定时任务并将定时调度任务持久化到mysql以及quartz集群配置(代码片段)

1.创建quartz数据库并导入quartz的SQL脚本文件quartz源码下载地址:http://www.quartz-scheduler.org/downloads/下载完成后解压,在/src/org/quartz/impl/jdbcjobstore可以找到对应数据库的SQL脚本我这里使用的是MySQL数据库,SQL脚本如下:... 查看详情

springboot整合quartz实现动态的创建或删除定时任务并将定时调度任务持久化到mysql以及quartz集群配置(代码片段)

1.创建quartz数据库并导入quartz的SQL脚本文件quartz源码下载地址:http://www.quartz-scheduler.org/downloads/下载完成后解压,在/src/org/quartz/impl/jdbcjobstore可以找到对应数据库的SQL脚本我这里使用的是MySQL数据库,SQL脚本如下:... 查看详情

springboot和quartz整合分布式多节点

  虽然单个Quartz实例能给予我们很好的任务job调度能力,但它不能满足典型的企业需求,如可伸缩性、高可靠性满足。假如你需要故障转移的能力并能运行日益增多的Job,Quartz集群势必成为你应用的一部分了。使用Quartz的集群... 查看详情

springboot整合quartz实现定时任务

依赖包1<dependency>2<groupId>org.quartz-scheduler</groupId>3<artifactId>quartz</artifactId>4</dependency>5<dependency>6<groupId>org.springframework</gro 查看详情

springboot集成quartz集群(代码片段)

为什么要使用Quzrtz集群  在项目进行集群部署时,如果业务在执行中存在互斥关系,没有对定时任务进行统一管理,就会引起业务的多次执行,不能满足业务要求。这时就需要对任务进行管理,要保证一笔业务在所有的集群环... 查看详情

springboot应用系列6--springboot2整合quartz

...bsp;Scheduler(调度器):负责Job的执行。有两种方式可以实现SpringBoot与Quartz的整合:一、使用Spring 查看详情

spring+quartz集群环境下定时调度的解决方案

...的添加了Quartz定时调度引擎,其实就是一个Quartz和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是部署在集群环境中的,这样我们之前的定时调度就会出现问题了,因为我们的定时任务都加载在内存中的,每个... 查看详情

springboot整合quartz

参考技术A写在前面:本项目环境springboot+springdatajpaQuartz核心概念:Job表示一个工作,要执行的具体内容。此接口中只有一个方法,如下:voidexecute(JobExecutionContextcontext)JobDetail表示一个具体的可执行的调度程序,Job是这个可执行... 查看详情

springboot开发案例之整合quartz任务管理系统

...统,适用于中小项目。开发环境JDK1.7、Maven、Eclipse技术栈SpringBoot1.5.2、thymeleaf、quartz2.3.0、iview、vue、layer、AdminLTE、bootstrap启动说明项目使用的数据库为MySql,选择resources/sql中的tables_mysql_innodb.sql 查看详情

springboot2.x开发案例之整合quartz任务管理系统

基于spring-boot2.x+quartz的CRUD任务管理系统,适用于中小项目。基于spring-boot+quartz的CRUD任务管理系统:https://gitee.com/52itstyle/spring-boot-quartz开发环境JDK1.8、Maven、Eclipse技术栈SpringBoot2.0.1、thymeleaf3.0.9、quartz2.3.0、iview、vue 查看详情

springboot整合quartz

1、创建    一、SpringBoot整合Quartz引入SpringBoot的基础依赖   1、引入依赖     2、编写简单任务类 3、创建任务调度类  4、创建任务调度方法  5、编写触发方式 fixedDe... 查看详情

springboot整合quartz遇到的错误

1、springboot整合quartz执行多个定时任务时报:org.quartz.ObjectAlreadyExistsException:UnabletostoreJob:‘group1.job1‘,becauseonealreadyexistswiththisidentification.定时任务虽然执行,但报了错误。第一次执行时没有报错误,第二次及之后执行前会报这个... 查看详情

springboot+quartz集群

 springbootbean配置:@ConfigurationpublicclassQuartzConfig{        @Value("${quartz.scheduler.instanceName}")    privateStringquartzInstan 查看详情

springboot定时任务quartz整合(多数据源+quartz持久化到数据库)(代码片段)

...数据源参数,调用相应的service或mapper方法。(1条消息)Springboot整合多数据源(自定义注解+aop切面实现)_明湖起风了的博客-CSDN博客quartz:通过serviceImpl实现类实现核心业务逻辑(添加、暂停、修改任务等ÿ... 查看详情

springboot2.x版本整合redis(单机/集群)(使用lettuce)

在springboot1.x系列中,其中使用的是jedis,但是到了springboot2.x其中使用的是Lettuce。此处springboot2.x,所以使用的是Lettuce。关于jedis跟lettuce的区别:Lettuce和Jedis的定位都是Redis的client,所以他们当然可以直接连接redisserver。Jedis在实现... 查看详情

springboot集成quartz实现任务调度

...模式组件模式链式写法体系结构调度器任务触发器架构图springbootquartzpom配置<dependency><groupId>org.quartz-scheduler</groupId><artifactId>quartz</a 查看详情

springboot整合quartz定时器

概述  项目需要定时器的调度管理,原来使用SpringBoot自带的定时器,但是不能后台动态的操作暂停、启动以及新增任务等操作,维护起来相对麻烦;最近研究了Quartz的框架,觉得还算不错,整理了一下代码,整合到现有系统... 查看详情

quartz-springboot2.1.5整合(代码片段)

 一.整合的步骤建立springboot工程映入相关依赖导入quartz的tables_mysql_innodb.sql文件到数据库中建立中间数据控制表建立Job工厂类建立任务Trigger触发器监听类建立业务控制处理类项目重启重置任务处理配置quartz参数二.详细描述建... 查看详情