Установка кварцевого задания CronTrigger один раз в день не работает на сервере Linux - PullRequest
0 голосов
/ 07 мая 2018

Мне нужно, чтобы работа выполнялась один раз в день в течение недели, начиная с 01:00 утра.

Приложение упаковано в банку.

Работая в Windows как java -jar в приложении, она работает нормально, начиная работу в момент, указанный в CronTrigger.

При запуске на linux-сервере приложение, похоже, запускается каждую секунду.

Зависимость кварца Maven

<dependency>
    <groupId>quartz</groupId>
    <artifactId>quartz</artifactId>
    <version>1.5.2</version>
</dependency>

** Эта версия используется, потому что сервер работает на Java 1.4. Самые последние версии кварца сгенерировали ошибки при запуске приложения **

Я попытался запустить выражение cron один раз в 1:00 с понедельника по пятницу. (0 0 1? * MON-FRI)

Я пробовал каждый день в 00:00 (0 0 0? * * *)

Ссылка: Генератор хрон https://www.freeformatter.com/cron-expression-generator-quartz.html

Класс

package com.everis.centers;

import java.util.TimeZone;

import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;

import com.everis.centers.job.ExecuteJob;

public class ExportsApplication {

    private static final String PERIOD = "0 0 1 ? * MON-FRI";
    private static final String PERIOD_2 = "0 0 0 ? * * *";

    public static void main(String[] args) {

        try {

            SchedulerFactory sf = new StdSchedulerFactory();
            Scheduler scheduler = sf.getScheduler();

            JobDetail job = new JobDetail("exportJob", "vj1", ExecuteJob.class);
            CronTrigger ct = new CronTrigger("exportTrigger", "vt1", PERIOD);
            ct.setTimeZone(TimeZone.getTimeZone("America/Sao_Paulo"));

            scheduler.scheduleJob(job, ct);
            scheduler.start();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Если вы используете выражение cron (0 * / 2 *? * *) для запуска каждые 2 минуты в день. Работает нормально. Я не понимаю причину проблемы не только выступать один раз в день в 1 час ночи. Если кто-то может помочь, я очистил всю документацию.

Obs

То, что я понял, было то, что когда время выполнения достигнуто, оно выполняется в цикле. То есть, если я установлю 1 час ночи с того времени, оно будет выполнено в цикле. Вместо того, чтобы бежать один раз и ждать следующего дня.

1 Ответ

0 голосов
/ 08 мая 2019

С здесь вы можете понять значение каждого значения в выражении Cron. Если вам нужно выполнять работу каждый день в 12:00, попробуйте использовать это выражение 0 0 0 * * * *. Это будет запускать задания каждый 00:00 час каждый день и только один раз. Если вы хотите понять важность использования ?, вы можете отослать этот ответ здесь

Дайте мне знать, если у вас возникнут какие-либо проблемы.

Вы можете попробовать Crontab , который использует стиль cron в UNIX (без поддержки секунд). Если вам нужно также указать секунды, вы можете сослаться на this .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...