• quartz集群原理2


     
    一般是需要设置 org.quartz.jobStore.isClustered = true,
     
    测试发现, 设置org.quartz.jobStore.isClustered = false 和 true , 表面上差别不是很大。
     
    都是一样会执行。
     
     
    都是。抢占锁的方式执行。。 不过 不是平均每个节点30s, 而是抢占式。
     
     
    但是呢,如果是isClustered = false , 那么没有 ClusterManager线程, 自然不会有异常恢复、转移等功能。 如果是集群模式的话,是有的。
     
     ...
     
    另外,如果是集群模式,那么 getLockHandler() 是DBSemaphore , 其obtainLock 方法需要真正的执行sql, 需要 在 qrtz_lock 表中新增行等等。
     
    而如果非集群模式,那么 getLockHandler() 是SimpleSemaphore , 其obtainLock 方法不需要真正的执行sql,不需要数据库:
    public boolean requiresConnection() {
    return false;
    }
     
    也 不需要 在 qrtz_lock 表中新增行等等, 而仅仅是 jvm 内部防止即可!!。
     
     
    quartz的集群, 其实跟单个quartz实例差不多, 因为它支持是任务调度方式还是一样的, 也就是通过数据库表进行控制,本质是一样的, 对于某个任务的调度, 只支持一个实例运行, 不能设置为所有实例都运行一遍。
     
    就是说,任何时刻,一个任务调度, 只能在一个节点实例上运行! 这一点是和其他的任务调度框架差别比较大的! 
     
    所以呢,我认为,它并不是真正的分布式的集群! 这个需要引起注意!
     

    另外,DisallowConcurrentExecution 的作用是什么? 你一定会很疑惑,感觉是控制并发执行用的,其实呢,并不是,它控制是否允许 多线程执行。就是说, 一个任务呢, 还是只能有一个线程执行, 不允许多线程执行。


    版权声明
    本文原创发表于 博客园,作者为 阿K .     本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
    欢迎关注本人微信公众号:觉醒的码农,或者扫码进群:

  • 相关阅读:
    [转]理解java的三大特性之多态
    [转]java:IO流学习小结
    Base64 加密之中文乱码
    piwik优化之定时任务生成统计数据
    php统计中英文混合的文章字数
    Linux常用命令之定时任务
    skype在线状态代码详解
    php+google/baidu翻译接口
    php限制文件下载速度的代码
    PHP破解wifi密码(wifi万能钥匙的接口)
  • 原文地址:https://www.cnblogs.com/FlyAway2013/p/15172036.html
Copyright © 2020-2023  润新知