Quartz,暂停后重新启动,会连续多次调用job中的execute方法。如果当前工作的处理时间过长必然会导致问题。都不行啊啊 咋办咋办
当然是避免重入咯,单机下随便找个对象标识下我已经在跑了,后面重入的时候发现对象标识已经变化就知道有线程已经在跑就可以直接退出了。集群下使用zookeeper或者第三方缓存(如redis等)申请一个分布式锁加个超时,实在不行找个db里面记下也成。当然要做的好点的话在集群环境下可以两者结合,分布式锁不带超时,记录申请机器标识(比如机器名或ip)。当要重入时,其他机器发现标识不是自己就直接退出,如果请求锁的机器发现自己之前请求过锁了,那么再看下自己内部的对象标识是不是已经变化,如果已经变化的话就表示自己前面已经在做了直接退出,否则就说明可能自己的程序重启过或有bug(没有在执行完毕释放/删除锁)