每天设置一次CronTrigger quartz作业对linux服务器

时间:2018-05-07 13:59:53

标签: java quartz-scheduler quartz

我需要在上午01:00开始每周一次的工作。

应用程序打包为jar。

在应用程序上作为java -jar在Windows上运行它通常在CronTrigger中报告的时间启动作业。

在Linux服务器上运行,应用程序似乎每秒都在循环运行。

Quartz Dependency Maven

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

** 正在使用此版本,因为服务器运行java 1.4。最新版本的石英在运行app **时产生了错误

我尝试将cron表达式从星期一到星期五凌晨1点运行一次。 (0 0 1?* MON-FRI)

我每天都在00:00尝试(0 0 0?* * *)

参考: cron generator 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点进行一次。如果有人可以提供帮助,我已经清除了所有文件。

观测值

我意识到,当达到执行时间时,它会循环执行。也就是说,如果我设置为从那个时间开始运行1点钟,它就会循环执行。而不是跑一次并等待第二天。

1 个答案:

答案 0 :(得分:0)

通过here,您可以了解Cron表达式中每个值的重要性。如果您需要每天凌晨12点运行作业,请尝试使用此表达式0 0 0 * * * *。每天每00:00小时运行一次作业,并且只有一次。如果您想了解使用?的重要性,可以参考此答案here

让我知道您是否遇到任何问题。

您可以尝试使用UNIX风格的cron(无秒支持)的Crontab。如果还需要指定秒数,则可以引用this