SpringBootマルチインスタンスQUARTZを使用した繰返し実行の問題


プロジェクトは1ヶ月以上運行されており、マルチインスタンスのQuartzはずっと問題なく、今日突然1つのJOBが2回繰り返し実行された.ログを表示すると、2つのインスタンスがそれぞれ1回実行されていますが、偶発的な現象です.つまり、1回実行し、1回実行し、2回実行し、規則がありません.おかしいですね.多くのインスタンスQuartzを使っているのに.スケジューラ・サービスのログの再表示

2017-09-05T11:59:00+08:00
[APP/0]
OUT
2017-09-05 11:59:00.004 INFO 14 --- [ryBean_Worker-3] o.q.p.history.LoggingJobHistoryPlugin : Job DEFAULT.PROBLEM_DISPATCH fired (by trigger DEFAULT.PROBLEM_DISPATCH) at: 11:59:00 09/05/2017
2017-09-05T11:58:00+08:00
[APP/0]
OUT
2017-09-05 11:58:00.009 INFO 14 --- [ryBean_Worker-4] o.q.p.history.LoggingJobHistoryPlugin : Job DEFAULT.PROBLEM_DISPATCH execution complete at 11:58:00 09/05/2017 and reports: null

quartzはまずtriggerを見つけて再びJOBを実行しますが、私のプロジェクトには複数のタイミングタスクが1分に1回実行されています.繰り返し実行されているこのJOB 1ログでは、次のJOB 2が間違っていることに気づきました.同僚のこのJOB 2コード自体が間違っていて、ずっと間違っていました.JOBがtriggerを取得した時点がちょうどJOB 2がtriggerを取得した時点であった場合、JOB 2がtriggerを取得して報告を誤ったため、他の例がJOB 1を1回取得したため、両例ともJOB 1のtriggerを取得したため、2回実行したものと推測される.
解決方法:スケジューリングサービスのJOBに対して消費サービスの具体的なfeignリンクを1つだけ書けばよいし、hystrixロールバックを加えることで、消費者サービスが何の間違いも他のサービスのJOBに影響を与えない.PS:同僚はfeign対応のサービス名を書き間違えたのですが・・・、唯一間違いを犯すことができる場所は、雷を踏んでしまいました--
疑問:なぜtriggerを取得したときに相互に影響し合うのですか?彼らがグループにいる理由なのか?知っていることを教えてください.私はまずtriggerをグループ化しました.念のため、デフォルトのDEFAULTでした.
2018-04-20以上はくだらない話ばかりで、その時はどう思っていたのか分かりません...経験豊富な同僚に聞いてみると、彼が私に答えたのは、彼らのプロジェクトにもこの問題があり、解決方法は、タスクが実行されるたびに自分で手動でロックをかけ、quartz自体のロックメカニズムを使わないことです.まあ、ちょっとわかりますが、能力は限られていますね~
大丈夫だ0自体がQuartzに統合されているので、この問題は起こらないでしょう.
2018-07-18
解決方法:
       org.quartz.jobStore.acquireTriggersWithinLock=true

lavenderyhjの共有原文に感謝します.https://segmentfault.com/a/1190000015492260