spring boot 整合 quartz 集群环境 实现 动态定时任务配置【原】

最近做了一个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;
    }
时间: 2024-10-07 05:25:14

spring boot 整合 quartz 集群环境 实现 动态定时任务配置【原】的相关文章

Spring+监听器+Quartz集群(1)——基本配置

先说说项目背景,因为业务需求,项目中有很多定时任务,这自然用到了Quartz这个开源产品.而在这之前使用的Quartz主要是基于内存的,在应用程序启动时,由监听器创建定时任务,为了防止多个应用程序重新创建任务,只能在发布时,在另外的web.xml中禁用监听器.这样系统发布变得麻烦,因为不同的应用程序的配置不同. 除了发布麻烦,还有不能发挥集群的优势,一旦运行任务的服务器崩溃,集群中的其他服务器不能接受定时任务. 为了解决以上的两个问题,在系统中使用Quartz集群,同时考虑到系统中创建定时任务的

Spring boot连接MongoDB集群

主要问题是:MongoDB集群分为复制集(replicaSet)与分片集(shardingSet),那么如何去连接这两种集群: 参考官方文档,我使用了最通用的方法:通过构造connection string来通用连接两种集群: 两种集群connection string的构造方法:replicaSet中选取primary节点与secondary节点,排除arbiter节点:shardingSet中选取mongos节点: Mongo的connection string够着方法: mongodb:/

Spring boot 整合 Quartz (小白专场)

0.项目结构(含主函数): 1.依赖: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apac

Spring Boot 整合 Dubbo和Zookeeper

Spring Boot 整合 Dubbo和Zookeeper Spring Boot 整合 Dubbo和Zookeeper 环境介绍 Zookeeper 安装 启动 Dubbo admin 搭建 创建主maven项目 创建子spring boot项目 环境介绍 zookeeper 安装 dubbo-admin 查看管理注册中心服务提供者和消费者 Zookeeper 安装 http://zookeeper.apache.org/releases.html 下载最新安装包,文件格式是tar.gz,可

rocketmq那些事儿之集群环境搭建

上一篇入门基础部分对rocketmq进行了一个基础知识的讲解说明,在正式使用前我们需要进行环境的搭建,今天就来说一说rockeketmq分布式集群环境的搭建 前言 之前已经介绍了rocketmq的入门基础,相信各位已经基本了解,今天进行一个分布式集群的搭建,其实可以通过本地源码来进行源码的使用和学习,但是作为开发维护人员还是需要去了解分布式集群的部署流程,方便后面集群的调试和测试 配置参数 注意官方给的配置文件都是默认的,最简单的版本,线上的环境需要根据自己需求来进行配置,在这里说明下其中的部分

zookeeper集群环境搭建详细图文教程

zookeeper集群环境搭建详细图文教程 zhoubang @ 2018-01-02 [文档大纲] 友情介绍 软件环境 注意点 环境安装 1. 新建用于存储安装包以及软件安装的目录 2. 下载安装zookeeper 3. 解压zookeeper压缩包 单节点zookeeper配置 1. 配置zoo.cfg文件 2. 配置zookeeper的数据存储目录 3. 新建myid文件 4. 配置zookeeper集群节点 5. 启动zookeeper服务 6. 检查zookeeper服务是否成功启动

spring boot + quartz 集群

spring boot bean配置: @Configuration public class QuartzConfig { @Value("${quartz.scheduler.instanceName}") private String quartzInstanceName; @Value("${org.quartz.dataSource.myDS.driver}") private String myDSDriver; @Value("${org.q

spring quartz 集群配置

Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中.它提供了巨大的灵活性而不牺牲简单性.你能够用它来为执行一个作业而创建简单的或复杂的调度. 在项目中有大量的后台任务需要调度执行,如构建索引.统计报表.周期同步数据等等,要求任务调度系统具备高可用性.负载均衡特性,使用Quartz 会很方便. 下文是spring和quartz进行整合,同时支持集群部署.quartz集群的支持是通过数据库进行任务调度的感知. 1.使用的版本情况:spring

集群环境下定时调度的解决方案之Quartz集群

集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是部署在集群环境中的,这样我们之前的定时调度就会出现问题了,因为我们的定时任务都加载在内存中的,每个集群节点中的调度器都会去执行,这就会存在重复执行和资源竞争的问题,那么如何来解决这样的问题呢,往下面看吧... 解决方案 在一般的企业中解决类似的问题一般都是在一个note上部署Quartz其他note