首页 > 其他 > 详细

取巧的方法实现多个Quartz同步

时间:2014-11-18 02:09:14      阅读:145      评论:0      收藏:0      [点我收藏+]

? 一套老系统,采用Quartz进行一些定期任务。新加定期任务,处理数据库中的某些数据。由于采用了tomcat集群,有多台服务器并且同一台机器上有多个tomcat。

? 代码简单,但是出来以后发现由于多个任务会同时进行,导致同一条数据被多次处理。毫无疑问,这种情况是无法接受的。首先想到的是通过配置Quartz实现任务同步。但是对Quartz不是很熟悉,Google一轮下来,发现Quartz提供了同步,但是配置似乎相当复杂,并且出来的效果是Quartz集群,同一个时刻只能一个tomcat的Quartz运行,而我应用中有些任务必须每个tomcat必须运行,感觉没达到要求。

? 第二步,决定自己处理,尝试了几种方法,没达到预期效果。

? 最后,想到一个感觉有点取巧的办法。不知道会有什么问题,但是暂时解决问题。

? 做法是定义一张新表,只有一个字段ID,默认插入一条记录。

? 定义一个函数,每次开始任务时load该行并且锁定。

?

	public void getLock() {
		session = this.getSession();

		tx = session.beginTransaction();
		session.load(TLock4Check.class, 1,LockMode.UPGRADE);
	}

?? 任务结束时,放弃锁定

	public void releaseLock() {
		tx.rollback();
		this.releaseSession(session);
	}

?看起来有效果,达到预期效果,但总觉得不太正统,下次找个比较正统的解决方案替换之。

取巧的方法实现多个Quartz同步

原文:http://naso.iteye.com/blog/2157332

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!