java多实例下任务调度问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java多实例下任务调度问题相关的知识,希望对你有一定的参考价值。
假如我的应用部署在3台服务器,但访问的数据库是同一个。现在要实行对数据库操作的任务调度,怎样才能避免任务在3台服务器重复调用问题(只需要执行1次)
有个比较简单的方法,那就是首先在数据库中加入一个表,用来专门保存任务的。
在应用启动任务时,根据任务ID,去select * from taskID=*** for update
利用 for update的特性实现一个锁机制(如果获取数据成功就执行任务,如果失败就退出)。
在任务完成后再释放。 参考技术A 像你这类问题,有些时间任务框架都有实现处理的,但本质还是要建表
只是用框架的话,基本不用开发代码,直接配置就可用了
可以使用QUARTZ框架解决此问题
http://www.iteye.com/topic/486055 参考技术B 使用数据库控制,因为你3太机器互相不通信,只有数据库是公共资源。追问
我也是这么觉得的,但具体要怎么实现啊
追答这个,得具体问题具体分析了,查询的话,一般会通过memcache服务器来实现,修改一般通过消息机制来实现。插入一般不存在这个问题。
本回答被提问者采纳Java多线程基础之任务调度
* Timer:任务调度
* schedule(TimerTask task, Date time);
* schedule(TimerTask task, Date
* firstTime, long period);
* TimerTask实现了Runnable接口;也是一个线程 可以了解一下QUQRTZ框架
public class Time { public static void main(String[] args) { Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { System.out.println(" so easy"); } }, new Date(System.currentTimeMillis() + 1000), 1000); } }
以上是关于java多实例下任务调度问题的主要内容,如果未能解决你的问题,请参考以下文章
java 任务调度 框架比较多 那个 最好用呢 .. quartz 吗。谁能给我推荐一下呢。