最近做了一个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", "");
prop.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
prop.put("org.quartz.threadPool.threadCount", "");
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", "");
return prop;
}

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

  1. Spring Boot MyBatis 数据库集群访问实现

    Spring Boot MyBatis 数据库集群访问实现 本示例主要介绍了Spring Boot程序方式实现数据库集群访问,读库轮询方式实现负载均衡.阅读本示例前,建议你有AOP编程基础.mybat ...

  2. spring boot 整合quartz ,job不能注入的问题

    在使用spring boot 整合quartz的时候,新建定时任务类,实现job接口,在使用@AutoWire或者@Resource时,运行时出现nullpointException的问题.显然是相关 ...

  3. spring boot整合quartz实现多个定时任务

        版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/liuchuanhong1/article/details/78543574 最近收到了很多封邮件, ...

  4. Nacos集群环境的搭建与配置

    Nacos集群环境的搭建与配置 集群搭建 一.环境: 服务器环境:CENTOS-7.4-64位 三台服务器IP:192.168.102.57:8848,192.168.102.59:8848,192. ...

  5. Spring+Quartz集群环境下定时调度的解决方案

    集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...

  6. Spring Boot 整合Quartz定时器

    概述 项目需要定时器的调度管理,原来使用Spring Boot自带的定时器,但是不能后台动态的操作暂停.启动以及新增任务等操作,维护起来相对麻烦:最近研究了Quartz的框架,觉得还算不错,整理了一下 ...

  7. Spring Boot整合Quartz实现定时任务表配置

    最近有个小项目要做,spring mvc下的task设置一直不太灵活,因此在Spring Boot上想做到灵活的管理定时任务.需求就是,当项目启动的时候,如果有定时任务则加载进来,生成schedule ...

  8. hadoop集群环境搭建之安装配置hadoop集群

    在安装hadoop集群之前,需要先进行zookeeper的安装,请参照hadoop集群环境搭建之zookeeper集群的安装部署 1 将hadoop安装包解压到 /itcast/  (如果没有这个目录 ...

  9. Spring Boot集成Redis集群(Cluster模式)

    目录 集成jedis 引入依赖 配置绑定 注册 获取redis客户端 使用 验证 集成spring-data-redis 引入依赖 配置绑定 注册 获取redis客户端 使用 验证 异常处理 同样的, ...

随机推荐

  1. HDU 3068 Manacher

    题目链接:http://hdu.hustoj.com/showproblem.php?pid=3068 今天学习一下马拉车算法,虽然mg讲过,但是没有系统去学. 算法学习:参考博客 马拉车模板题. # ...

  2. 前端笔记之Vue(七)Vue-router&axios&Vue插件&Mock.js&cookie|session&加密

    一.Vue-router(路由) 1.1路由创建 官网:https://router.vuejs.org/zh/ 用 Vue.js + Vue Router 创建单页应用,是非常简单的.使用 Vue. ...

  3. SRM1153

    SRM 711 DIV1 <br > 250 ConsecutiveOnes 位数不会很多,直接暴枚 直接在\(n\)的基础上修改,暴枚修改的区间,显然,位置先于暴力修改区间的位置不需要改 ...

  4. 关于编写Windows程序中启动兼容性问题

    之前用qt4编写Windows程序的时候遇到了一个软件在系统的兼容性问题:用户在win10系统下使用这个程序的时候,如果没有用低于win10版本的兼容模式运行的时候,存在运行某部分功能的时候无法使用的 ...

  5. Android CrashHandler

    package jason.android.utils; import android.content.Context; import android.content.pm.PackageInfo; ...

  6. mac 查看系统位数

    uname -a

  7. 百科知识 hta文件如何打开

    后缀名为hta是什么文件,谢谢? 2006-10-11 21:36 提问者: tanhailong2006 | 浏览次数:2092次 我来帮他解答 输入内容已经达到长度限制 还能输入 9999 字 插 ...

  8. PS 基础知识 如何绘制几何图形

    注意:规则的几何图形必须用路径工具,如果使用简单的椭圆工具再描边,则效果是像素堆砌起来的.图像一旦放大就是出现明显的失真.   使用钢笔工具,然后选择路径工具,然后选择需要绘制的图形.   如果需要找 ...

  9. Android Camera探究之路——起步

    Android Camera探究之路--起步 Camera在手机中有着举足轻重的地位,无论是二维码还是照片.识别.都离不开摄像头,本文将对Android中的Camera进行全面解析. 权限镇楼: &l ...

  10. react 自定义 TabBar 组件

    1.创建 组件 src/components/TabBar/index.js /** * TabBar 组件 */ import React ,{ PureComponent } from 'reac ...