当前位置: 首页 > 知识库问答 >
问题:

Quartz scheduler作业不是每5分钟重复执行一次

东郭自强
2023-03-14

我有一个代码来安排每5分钟执行一个作业。代码如下

JobDetail jobDetail = JobBuilder.newJob(ChieldJob.class).withIdentity(("job_"+sched_id+"_"+schd_name), "todaysJob")
                            .setJobData(chieldJobData).build();

制作触发器的代码如下所示。

Trigger trigger = TriggerBuilder.newTrigger().withIdentity(("trg_" + sched_id +"_"+schd_name), "todaysJob")
                            .startAt(new Date(row.get(field_Schd_Start_TS).longValue()))
                            .build();
trigger = trigger.getTriggerBuilder().withSchedule((ScheduleBuilder) SimpleScheduleBuilder.repeatMinutelyForever(5)).build();

现在我通过下面的代码安排作业

context.getScheduler().scheduleJob(jobDetail,trigger);

共有1个答案

林德华
2023-03-14

我在https://www.concretepage.com/scheduler/quartz/quartz-2-scheduler-SimpleTrigger-example-with-SimpleScheduleBuilder找到了一个很好的例子

我有“一些”示例代码可以正常工作(我使用了.RepeatSecondlyForever,因为我想要快速调试输出):

import org.quartz.JobBuilder;
import org.quartz.JobDetail;  
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;

import java.util.Calendar;
import java.util.Date;

public class SimpleTriggerExample {
    public static void main(String[] args) throws SchedulerException {
         SchedulerFactory schedulerFactory = new StdSchedulerFactory();
         Scheduler scheduler = schedulerFactory.getScheduler();
         JobDetail jobDetail =     JobBuilder.newJob(PrintDateJob.class).withIdentity("goodjob", "mygroup").build();

         SimpleTrigger trigger = TriggerBuilder.newTrigger().withIdentity("goodjob", "mygroup")
            .startAt(new Date(Calendar.getInstance().getTimeInMillis() + 3000))
            .withSchedule(SimpleScheduleBuilder.repeatSecondlyForever(5))
            .build();

        scheduler.scheduleJob(jobDetail, trigger);
        scheduler.start();

        try {
            //wait to finish the job
            Thread.sleep(200000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        //shutdown scheduler gracefully
        scheduler.shutdown(true);
    }
}

“PrintDateJob.Class”在此处:

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.JobKey;

import java.util.Date;

public class PrintDateJob implements Job {
    public void execute(JobExecutionContext context)
        throws JobExecutionException {
        JobKey jobKey = context.getJobDetail().getKey();
        System.out.println(jobKey+": "+ new Date());
    }
}
<?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>

        <groupId>chocksaway</groupId>
        <artifactId>001</artifactId>
        <version>1.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.1</version>
        </dependency>
    </dependencies>
</project>
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
mygroup.goodjob: Thu Jun 21 15:15:53 BST 2018
mygroup.goodjob: Thu Jun 21 15:15:58 BST 2018
mygroup.goodjob: Thu Jun 21 15:16:03 BST 2018
mygroup.goodjob: Thu Jun 21 15:16:08 BST 2018
 类似资料:
  • 我希望每5分钟运行一个脚本,比如说从13:02开始,这样我可以每5分钟运行另一个脚本,但从13:04开始,第二个脚本在第一个作业开始两分钟后运行。我怎样才能做到这一点?

  • 问题内容: 我是node.js的新手。我需要node.js每五分钟查询一次mongodb,获取特定数据,然后使用socket.io,允许已订阅的Web客户端访问此数据。我已经设置了socket.io部分,当然还有mongo,我只需要知道如何每隔五分钟运行一次node.js然后发布到socket.io。 最好的解决方案是什么? 谢谢 问题答案: 将该代码另存为node_regular_job.js并

  • 问题内容: 如何每分钟运行一个函数?在JavaScript中,我可以做类似的事情,在Swift中是否存在类似的事情? 想要的输出: 你好世界每分钟一次… 问题答案: 记住要导入基金会。 斯威夫特4:

  • 如何每5分钟左右运行一个PHP文件?我尝试使用cron,但它似乎不起作用。假设我想让我的网站运行一个播放声音的php文件。如何使php文件每5分钟运行一次,使声音每5分钟播放一次。我知道JavaScript可以做到这一点,因此函数可以按设定的间隔运行,但我希望文件也这样做。 这样做的原因是我正在创建一个网站,我希望用户得到实时通知。为了做到这一点,我需要运行php文件,以便它可以检测用户通知的更改

  • 问题内容: 我正在cronjob中运行PHP脚本,我想每5分钟发送一封电子邮件 我当前的(crontab)cronjob: cronmail.php如下: 但是我没有在30分钟内收到此配置的电子邮件。 问题答案: 在文件中,这些字段是: 每小时的分钟。 一天中的小时。 一个月中的某天。 一年中的月份。 一周中的天。 所以: 表示每小时10分钟执行一次。 如果您希望每五分钟使用一次,请使用以下任一方

  • 问题内容: 我希望添加一个条目,以每隔30分钟,每小时的零零几点和接近小时的30分钟执行一次脚本。我有以下内容,但它似乎无法在0上运行。 我需要使用什么字符串? cron在OSX上运行。 问题答案: 做: