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多实例下任务调度问题的主要内容,如果未能解决你的问题,请参考以下文章

具有多线程的MySql数据库中任务项的Java任务调度

Java多线程基础之任务调度

java 任务调度 框架比较多 那个 最好用呢 .. quartz 吗。谁能给我推荐一下呢。

Java多线程学习——任务定时调度

SpringBoot整合Quartz定时任务 的简单实例 2

为社么要用分布式集群任务调度?