quartz集群调度机制调研及源码分析

来源:互联网 发布:java创建动态数组赋值 编辑:程序博客网 时间:2024/06/07 12:40

推荐博文:http://www.cnblogs.com/davidwang456/p/4205237.html
原文:http://demo.netfoucs.com/gklifg/article/details/27090179

该博文针对quartz, 进行集群扩展分析非常的透彻。

原文是使用数据库进行集群扩展, 如果有时间我们可以使用Redis或者其他内存数据库进行集群扩展。

主要改动两个地方,这只是本人分析的结果。请大家指教。

1、JobStoreSupport.acquireNextTriggers() 方法

public List<OperableTrigger> acquireNextTriggers(final long noLaterThan, final int maxCount, final long timeWindow)        throws JobPersistenceException {        String lockName;        if(isAcquireTriggersWithinLock() || maxCount > 1) {            lockName = LOCK_TRIGGER_ACCESS;        } else {            lockName = null;        }        return executeInNonManagedTXLock(lockName,                new TransactionCallback<List<OperableTrigger>>() {                    public List<OperableTrigger> execute(Connection conn) throws JobPersistenceException {                        return acquireNextTrigger(conn, noLaterThan, maxCount, timeWindow);                    }                },                new TransactionValidator<List<OperableTrigger>>() {                    public Boolean validate(Connection conn, List<OperableTrigger> result) throws JobPersistenceException {                        //...异常处理回调方法, 添加自己的方法使得支持数据库或者Redis进行集群扩展                    }                });    }

2、JobStoreSupport.triggersFired()

public List<TriggerFiredResult> triggersFired(final List<OperableTrigger> triggers) throws JobPersistenceException {        return executeInNonManagedTXLock(LOCK_TRIGGER_ACCESS,                new TransactionCallback<List<TriggerFiredResult>>() {                    public List<TriggerFiredResult> execute(Connection conn) throws JobPersistenceException {                        List<TriggerFiredResult> results = new ArrayList<TriggerFiredResult>();                        TriggerFiredResult result;                        for (OperableTrigger trigger : triggers) {                            try {                              TriggerFiredBundle bundle = triggerFired(conn, trigger);                              result = new TriggerFiredResult(bundle);                            } catch (JobPersistenceException jpe) {                                result = new TriggerFiredResult(jpe);                            } catch(RuntimeException re) {                                result = new TriggerFiredResult(re);                            }                            results.add(result);                        }                        return results;                    }                },                new TransactionValidator<List<TriggerFiredResult>>() {                    @Override                    public Boolean validate(Connection conn, List<TriggerFiredResult> result) throws JobPersistenceException {                        //...异常处理回调方法                    }                });    }
0 0