quartzの使用中の気まずい問題

1326 ワード

ところで、私は1つの任務をしたいのですが、毎晩の1:30分に実行します.次のコードは故障していますか.
@Bean(name = "jobTrigger")
    public CronTriggerFactoryBean cronJobTrigger(JobDetail jobDetail){
        CronTriggerFactoryBean trigger = new CronTriggerFactoryBean();
        trigger.setJobDetail(jobDetail);
        trigger.setCronExpression("* 30 1 * * ?");
        trigger.setName("cal-ushimata");
        return trigger;
    }

長い間見ても問題が見えなかったり、ここに問題があることに気づかなかったりします.しかし、実行中にパチパチと何度も走って、合併の問題だと思っていたので、関連資料をたくさん探しました.
1.jobクラスに注記@DisallowConcurrentExecutionを追加
2.アプリケーション.义齿quartz.jobstore.acquireTriggerWithinLock=true
3.JobDetailFactoryBeanの中のjobDetail.setConcurrent(false);とっくに追加されています
予想通りの結果には至らなかった
偶然振り返ってcronのルールを見てみると、秒位は*では使えないことに気づきました.そうしないと、1:30分の1分で触発が止まらないことを示しています.実は、1分後には任務が入っていません.正しい書き方はこうすべきだ
@Bean(name = "jobTrigger")
    public CronTriggerFactoryBean cronJobTrigger(JobDetail jobDetail){
        CronTriggerFactoryBean trigger = new CronTriggerFactoryBean();
        trigger.setJobDetail(jobDetail);
        trigger.setCronExpression("0 30 1 * * ?");
        trigger.setName("cal-ushimata");
        return trigger;
    }

実は前にlinuxでcrontabを設定する習慣と少し関係があり、crontabには秒位がなく、ある時間にトリガーして時間と分を設定すればいいので、秒も設定する必要があることに気づかなかった.