java定时任务管理系统开源_定时任务管理系统(Quartz和Spring的整合)开源和源码简述(五)...

本文介绍了一个基于Spring和Quartz的Java定时任务管理系统,包括增删改查、停止、启动、修改和立即执行等功能。项目已在GitHub开源,适合学习和搭建简单定时任务管理系统。文章还探讨了Quartz的集群实现,包括节点宕机后的任务恢复,并讨论了Quartz设计上的取舍和集群适用场景。
摘要由CSDN通过智能技术生成

利用学习的时间这里写了个Spring和Quartz结合的一个web项目,纯后端的项目,restful接口

实现对定时任务的增、删、改、查、停止, 启动、定时规则修改、立即执行等。github地址:holly-quartz-web,这里刚开始是为了学习源码,后来有了一些改动,再后来就想做一些业务上的改造,所以clone了一个quartz-core的项目进行改造,后期打算对其集群方式进行改造等等。github地址:quartz-core,有一起感兴趣的朋友可以一起改造,目前的项目比较简单可以作为学习入门的项目,也可以作为搭建job管理系统的初期项目,慢慢迭代。

在四的时候我们讲了下整体run方法以及集群实现的核心思想,进一步解释这条规则就是:一个调度器实例在执行涉及到分布式问题的数据库操作前,首先要获取QUARTZ2_LOCKS表中对应当前调度器的行级锁,获取锁后即可执行其他表中的数据库操作,随着操作事务的提交,行级锁被释放,供其他调度器实例获取.

集群中的每一个调度器实例都遵循这样一种严格的操作规程,那么对于同一类调度器来说,每个实例对数据库的操作只能是串行的.而不同名的调度器之间却可以并行执行.这节我们看下细节,Quartz的一些设计上的取舍,以及有节点宕机后的job恢复执行(别的服务器节点是怎么接替它的任务的)。

在JobStoreSupport类中有个内部类ClusterManager,ClusterManager也是个Thread,在run方法中

@Override

public void run() {

while (!shutdown) {

if (!shutdown) {

long timeToSleep = getClusterCheckinInterval();

long transpiredTime = (System.currentTimeMillis() - lastCheckin);

timeToSleep = timeToSleep - transpiredTime;

if (timeToSleep <= 0) {

timeToSleep = 100L;

}

if(numFails > 0) {

timeToSleep = Math.max(getDbRetryInterval(), timeToSleep);

}

try {

Thread.sleep(timeToSleep);

} catch (Exception ignore) {

}

}

if (!shutdown && this.manage()) {

signalSchedulingChangeImmediately(0L);

}

}//while !shutdown

}

}

从方法中可以看出 run期间会sleep一会,实际运行的是manage方法

private boolean manage() {

boolean res = false;

try {

res = doCheckin();

numFails = 0;

getLog().debug("ClusterManager: Check-in complete.");

} catch (Exception e) {

if(numFails % 4 == 0) {

getLog().error(

"ClusterManager: Error managing cluster: "

+ e.getMessage(), e);

}

numFails++;

}

return res;

}

实际的方法还是在

protected boolean doCheckin() throws JobPersistenceException {

boolean transOwner = false;

boolean transStateOwner = false;

boolean recovered = false;

Connection conn = getNonManaged

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值