Quartz任务并发处理

来源:互联网 发布:手机遥控ppt软件 编辑:程序博客网 时间:2024/06/05 00:31

描述:使用quartz,设置的任务间隔是30秒,但是发现有的情况下,30秒内还没有处理完,此时,一个新的线程被创建,上一个30秒处理的数据又再次被get到并被处理,导致数据被处理两次【在数据库中更新两次或插入两次】。

想要的结果:当一个job再30秒内,还没有执行完毕,下一个线程不会被创建,从而保证在同一个时间点,相同的job不会被处理两次或更多次。

实现:

1)使用quartz【1.8.6】,任务类由原来实现Job,改为实现StatefulJob,该接口只是扩展了Job接口,执行过程中,使当前任务是有状态的,从而保证任务串行执行。

2)使用quartz【2.2.2】,在quartz2.0之后,提供了@DisallowConcurrentExecution注解,将这个注解加到job类上既可。

3)使用MethodInvokingJobDetailFactoryBean生成job,只需要配置属性concurrent=flase 即可保证线程中的任务执行完毕,才会创建新的线程

原创粉丝点击