用quartz进行定时任务的开发

某天突然遇到头疼的问题,定时任务怎么搞?Java貌似都得经过触发才能被访问到执行逻辑。还好闲的蛋疼的人有的是,有个叫quartz的框架很好用,不仅可以定时,还可以设置多久执行一次,几点到几点之间多久运行一次。强大了一匹,下面就我自己开发的东西总结一下。


1.准备quartz的包,网上down一个就行,在项目中buildPath

2.写一个你要执行的逻辑类


@Component
public class InterfaceReadTimeQuartz{

	public void readTimes() {
		//需要定时执行的逻辑
		
	}

}

3.配置xml,我在这就把bean主要的部分贴出来,照着这样写就行,放在beans节点下面

readTimes定时执行类里面的哪个方法
		*/15 * * * * ?0 1 0 * * ?0 09 16 * * ?
但是千万要注意的一件事就是配置的beans的xsi:schemaLocation里记得要加上这两个地址

http://www.springframework.org/schema/task
        http://www.springframework.org/schema/task/spring-task-4.0.xsd

因为我没加所以没好使


4.把xml文件配置到web.xml中。我比较懒所以把bean的xml直接放spring的配置文件下了。如果需要的直接去看看sping是怎么配在web.xml里怎么初始化的吧。


5.之前考虑到系统现在都是分布式的,放在了三个服务器上同时执行会不会出问题,quartz本身就有这样的机制


集群分布式并发环境中使用QUARTZ定时任务调度,会在各个节点会上报任务,存到数据库中,执行时会从数据库中取出触发器来执行,如果触发器的名称和执行时间相同,则只有一个节点去执行此任务。 
如果此节点执行失败,则此任务则会被分派到另一节点执行,中途也会自动检查失效的定时调度,发现不成功的,其他节点立马接过来继续完成定时任务。对应的定时任务调度表比较多,有11个。(这段话抄的,我明白咋回事就说不出来)


我亲身试验放在了两台机器,两台机器都分别执行了,分了时间的先后。这个还没有具体研究清楚,不过在逻辑当中控制好数据的正确性,quartz分布式没什么问题,如果不行的话最好部一个单独定时的服务器,以接口的形式进行访问。


暂时就想到这么多

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章