某天突然遇到头疼的问题,定时任务怎么搞?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 * * ?
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分布式没什么问题,如果不行的话最好部一个单独定时的服务器,以接口的形式进行访问。
暂时就想到这么多