定时任务多机部署时的任务调度
参加工作以来写过很多的定时任务,总结下之前遇到印象较深的问题——任务在多服务器部署时任务重复执行或者由于数据被其他任务锁执行失败的问题。
解决方案:
-
让任务只在一台执行
; -
使用已有框架的解决方案进行任务调度处理
;
第二种方法之前只是弄过quartz。按照它给的sql语句创建相关需要的表,然后根据其文档进行配置。这是最好的方案但是比较麻烦。本文只讨论第一种方案。
目前遇到的解决方法是:
-
通过动态的加载配置文件来实现
例如:新建多个Timmer的配置文件,对任务进行分配。针对不同的机器加载不同的配置文件。即不同的机器执行不同的任务 -
给任务增加执行机器的标识在任务执行时处理
例如:给任务带上标记 “执行机器IP” 任务执行时获取当前机器IP与任务执行机器IP对比。实现只在一台机器执行
以上两种方法都有个共同点——需要能让程序识别出当前任务在那台机器上面
第一种是方法是通过机器传递的参数不同来区分,第二种方法是获取机器host文件配置。顺便记录下java读取hosts文件以及获取本机ip地址的方法
String localHosts = InetAddress.getByName("job.self.host").getHostAddress();
String ip = NetworkUtil.getHostAddress().getHostAddress();
版权声明:本文为wu843820873原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。