如果使用了Quartz,当然在一个系统中绝不仅仅是一个job那么简单,如果同一个job同一时刻运行,可能会造成重复入库的情况。所以我们希望多线程时,能够控制同一时刻相同job只能有一个正在执行。
有时候job执行频率很小,然后在这么短的时间内该job还没结束,结果另一线程再次启用同一job下的方法,这样可能会造成重复的情况,希望在前一个此job结束后再进行下一次调用。
其实据说很简单,就是在detail的参数里加上一句话就行了,把这个job设置成有状态的job。
记得有一个问题,也是同样的情况,当相同的job来了前一个job还没执行完,可不可以让没执行完的job强制关闭执行当前job?
<—指定最终封装出的任务是否有状态->
定时任务测试
false
通过concurrent属性指定任务的类型,默认情况下封装为无状态的任务,如果希望目标封装为有状态的任务,仅需要将concurrent设置为false就可以了。
Spring通过名为concurrent的属性指定任务的类型,能够更直接地描述到任务执行的方式(有状态的任务不能并发执行,无状态的任务可并发执行),对于不熟悉Quartz内部机制的用户来说,比起statefule,concurrent显然更简明达意些。
关于有状态JOB(StatefulJob)
网上有很多关于有状态JOB的作用与使用的文章,我借鉴下,做下简单的说明: