1

ジョブのスケジューリングにクオーツスケジューラーを使用しています。毎日夜(9:00 PM)から翌日の朝(06:00 AM)までジョブを実行したい場合があります。このようなトリガー

      Trigger trigger2 = newTrigger()
    .withIdentity("trigger1", "group1")
    .startNow()
    .withSchedule(simpleSchedule()
            .withIntervalInSeconds(10)
            .repeatForever())            
    .build();

要件を満たすためにどのような変更を加える必要がありますか?

4

3 に答える 3

1

毎日 1 回ジョブを実行する必要がある場合は、ジョブの開始時刻のみを指定する必要があります。

newTrigger().withSchedule(
      CronScheduleBuilder.dailyAtHourAndMinute(21,0)).build();

スケジュールされたジョブ (データベース処理) に何時間もかかり、午前 6 時の制限時間を超える可能性がある場合、Quartz スケジューラーは役に立ちません。Quartz はジョブを開始するだけです。実行中のジョブを午前 6 時に停止する必要があります。たとえば、ジョブがメソッドであるとします。

public void doSomeDBOperations() {
    while(have more data to process) {
        if(Calendar.getInstance().get(Calendar.HOUR_OF_DAY) == 6) {
           break;
        }

        //insert data
    }
}
于 2013-03-27T10:01:13.757 に答える
1

Quartz CronExpressionを選択した場合は、0 * 21-23,0-5 ? * *毎日午前 0 時から午前 5 時 59 分までと午後 9 時から午後 23 時 59 分まで、毎分ジョブを起動する次のような式を使用できます。

trigger = newTrigger()
    .withIdentity("trigger7", "group1")
    .withSchedule(cronSchedule("0 * 21-23,0-5 ? * *"))
    .build();

インポートすることを忘れないでくださいimport static org.quartz.CronScheduleBuilder.cronSchedule

頻度 (この例では毎分) は、要件によって異なります。

于 2013-01-09T08:01:21.907 に答える
0

これは、クォーツを使用して時間をスケジュールするために使用できるリファレンスです。 Java – Quartz API を使用した Web アプリケーションでのジョブスケジューリング

この部分はあなたを助けるかもしれません

JobDetail jDetail = new JobDetail("Newsletter", "NJob", MyJob.class);

        //"0 0 12 * * ?" Fire at 12pm (noon) every day
        //"0/2 * * * * ?" Fire at every 2 seconds every day

 CronTrigger crTrigger = new CronTrigger("cronTrigger", "NJob", "0/2 * * * * ?");
于 2013-01-08T04:25:23.607 に答える