quartz在集群环境下的最终解决方案

本文介绍了如何在集群环境中配置Quartz,包括设置Scheduler属性、ThreadPool和JobStore。同时,展示了Quartz与Spring集成的方式,通过实现Job2接口解决集群下的序列化问题,允许在executeInternal中直接获取Spring的bean进行任务处理。
摘要由CSDN通过智能技术生成
      最近项目中使用了 spring +Quartz定时任务、但是项目最近要集群部署、多个APP下如何利用Quartz 协调处理任务。
      大家可以思考一下、现在有 A、B、C三个应用同时作为集群服务器对外统一提供服务、每个应用下各有一个Quartz、它们会按照既定的时间自动执行各自的任务。我们先不说实现什么功能,就说这样的架构其实有点像多线程。那多线程里就会存在“资源竞争”的问题,即可能产生脏读,脏写,由于三台 应用 里都有 Quartz,因此会存在重复处理 任务 的现象。
      解决方案一:只在一台 应用 上装 Quartz,其它两台不装,这样集群就没有意义了。
      解决方案二:使用其实Quartz自身可以实例化数据库的特性就可以解决问题
本方案优点:
1.     每台作为集群点的 应用上都可以布署 Quartz ;
2.     Quartz 的 TASK ( 12 张表)实例化如数据库,基于数据库引擎及 High-Available 的策略(集群的一种策略)自动协调每个节点的 QUARTZ ,当任一一节点的 QUARTZ 非正常关闭或出错时,另几个节点的 QUARTZ 会自动启动;
3.    无需开发人员更改原已经实现的 QUARTZ ,使用 SPRING+ 类反射的机制对原有程序作切面重构;
解决方案:
   1:去官网下载最新的 quartz 解压 在目录 docs\dbTables 下就会找到 tables_mysql.sql  文件、建立数据库Quartz 并导入数据库。
      
  2:生成 quartz.properties 文件,把它放在工程的 src 目录下 修改配置文件如下:
  1. #==============================================================    
  2. #Configure Main Scheduler Properties    
  3. #==============================================================     
  4. org.quartz.scheduler.instanceName = quartzScheduler  
  5. org.quartz.scheduler.instanceId = AUTO  

  6. #==============================================================    
  7. #Configure ThreadPool    
  8. #==============================================================   
  9. org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool  
  10. org.quartz.threadPool.threadCount = 10  
  11. org.quartz.threadPool.threadPriority = 5  
  12. org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = true 

  13. #==============================================================    
  14. #Configure JobStore    
  15. #==============================================================   
  16. org.quartz.jobStore.class &
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值