zoukankan      html  css  js  c++  java
  • 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 .     本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
    欢迎关注本人微信公众号:觉醒的码农,或者扫码进群:

  • 相关阅读:
    导出Execl
    字符串与整型的转换及判断
    sql 删除重复记录
    日期函数
    C#中Hashtable和HashMap的区别很详细;
    c# Cookie汉字乱码的问题
    C#遍历整个文件夹及子目录的文件代码,.Net技术文章,Asp.net系列教程,Asp.n...
    自定义服务器控件开发之2:文件上传控件
    09所对应的汉字
    ms sql 分割字符串
  • 原文地址:https://www.cnblogs.com/FlyAway2013/p/15172036.html
Copyright © 2011-2022 走看看