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", "");
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 集群环境 实现 动态定时任务配置【原】的更多相关文章
- Spring Boot MyBatis 数据库集群访问实现
Spring Boot MyBatis 数据库集群访问实现 本示例主要介绍了Spring Boot程序方式实现数据库集群访问,读库轮询方式实现负载均衡.阅读本示例前,建议你有AOP编程基础.mybat ...
- spring boot 整合quartz ,job不能注入的问题
在使用spring boot 整合quartz的时候,新建定时任务类,实现job接口,在使用@AutoWire或者@Resource时,运行时出现nullpointException的问题.显然是相关 ...
- spring boot整合quartz实现多个定时任务
版权声明:本文为博主原创文章,转载请注明出处. https://blog.csdn.net/liuchuanhong1/article/details/78543574 最近收到了很多封邮件, ...
- Nacos集群环境的搭建与配置
Nacos集群环境的搭建与配置 集群搭建 一.环境: 服务器环境:CENTOS-7.4-64位 三台服务器IP:192.168.102.57:8848,192.168.102.59:8848,192. ...
- Spring+Quartz集群环境下定时调度的解决方案
集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...
- Spring Boot 整合Quartz定时器
概述 项目需要定时器的调度管理,原来使用Spring Boot自带的定时器,但是不能后台动态的操作暂停.启动以及新增任务等操作,维护起来相对麻烦:最近研究了Quartz的框架,觉得还算不错,整理了一下 ...
- Spring Boot整合Quartz实现定时任务表配置
最近有个小项目要做,spring mvc下的task设置一直不太灵活,因此在Spring Boot上想做到灵活的管理定时任务.需求就是,当项目启动的时候,如果有定时任务则加载进来,生成schedule ...
- hadoop集群环境搭建之安装配置hadoop集群
在安装hadoop集群之前,需要先进行zookeeper的安装,请参照hadoop集群环境搭建之zookeeper集群的安装部署 1 将hadoop安装包解压到 /itcast/ (如果没有这个目录 ...
- Spring Boot集成Redis集群(Cluster模式)
目录 集成jedis 引入依赖 配置绑定 注册 获取redis客户端 使用 验证 集成spring-data-redis 引入依赖 配置绑定 注册 获取redis客户端 使用 验证 异常处理 同样的, ...
随机推荐
- 【WEB基础】HTML & CSS 基础入门(7)表格
表格的基本结构 表格是网页上最常见的元素,它除了可以用来展示数据,还常常被用来排版.虽然现在提倡使用DIV+CSS完成页面布局,但表格框架简单明了,对于繁杂的数据,一个简洁的表格能让其展现的极有条理. ...
- codevs——2548 自然数积分解
2548 自然数积分解 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 把自然数N分解为若干个自然数之积,输出 ...
- FMDB使用SQLite事务Save Point
FMDB使用SQLite事务Save Point 在SQLite中,事务提供了批量处理,批量撤销的功能.当批量操作中有一步无法完成操作,就会把执行过的语句都撤销,恢复到撤销前的状态.但是由于SQL ...
- Codeforces 323 B Tournament-graph
Discription In this problem you have to build tournament graph, consisting of n vertices, such, that ...
- K&R——第五章 指针与数组
#include <stdio.h> #define maxsize 5000 char buf[maxsize]; char *head = buf; char *new(int siz ...
- C#制作、打包、签名、发布Activex全过程【转】
http://www.cnblogs.com/still-windows7/p/3148623.html 一.前言 最近有这样一个需求,需要在网页上面启动客户端的软件,软件之间的通信.调用,单单依靠H ...
- hibernater-validator jar包冲突的问题
在引用hibernater-validator jar包时一直抛出异常,在引用带有该包的项目,或者同时在一个项目中使用该包和validator包都会抛出以下异常 最后发现是在Eclipse环境下,不能 ...
- 5.4 heapq--堆队列算法
本模块实现了堆队列算法,也叫作优先级队列算法.堆队列是一棵二叉树.而且拥有这样特点,它的父节点的值小于等于不论什么它的子节点的值,假设採用数组array实现,能够把它们的关系表示为:heap[k] & ...
- Hibernate Restrictions QBC运算符
HQL运算符 QBC运算符 含义 = Restrictions.eq() 等于equal <> Restrictions.ne() 不等于not equal > Restrict ...
- 用Visual C++ 2010 载入动态链接库三部曲(使用第三方库的一般方法)
以下以载入编译好的ACE动态链接库为例说明:这里如果你已经设置了环境变量ACE_ROOT ACE在VS2010下高速配置载入动态链接库三部曲:(这里如果你的ACE文件夹为E:\ACE_wrappers ...