定时任务多机部署时的任务调度

定时任务多机部署时的任务调度

参加工作以来写过很多的定时任务,总结下之前遇到印象较深的问题——任务在多服务器部署时任务重复执行或者由于数据被其他任务锁执行失败的问题。

解决方案:

  1. 让任务只在一台执行
  2. 使用已有框架的解决方案进行任务调度处理

第二种方法之前只是弄过quartz。按照它给的sql语句创建相关需要的表,然后根据其文档进行配置。这是最好的方案但是比较麻烦。本文只讨论第一种方案。

目前遇到的解决方法是:

  1. 通过动态的加载配置文件来实现
    例如:新建多个Timmer的配置文件,对任务进行分配。针对不同的机器加载不同的配置文件。即不同的机器执行不同的任务

  2. 给任务增加执行机器的标识在任务执行时处理
    例如:给任务带上标记 “执行机器IP” 任务执行时获取当前机器IP与任务执行机器IP对比。实现只在一台机器执行

以上两种方法都有个共同点——需要能让程序识别出当前任务在那台机器上面
第一种是方法是通过机器传递的参数不同来区分,第二种方法是获取机器host文件配置。顺便记录下java读取hosts文件以及获取本机ip地址的方法

String localHosts = InetAddress.getByName("job.self.host").getHostAddress();
String ip = NetworkUtil.getHostAddress().getHostAddress();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值