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

石英触发器不能立即触发

薛经艺
2023-03-14

我想用quartz scheduler使用jdbc数据存储立即执行作业~。然而,即使我使用now()或调用triggerjob进行调度,在调度和触发器fire之间也有20-30秒的延迟。

我尝试用一个简单的触发器执行作业:

JobKey key = //...
        JobDetail jobDetail = newJob(jobBean.getClass())
                .withIdentity(key)
                .usingJobData(new JobDataMap(jobParams))
                .storeDurably()
                .build();

        Trigger trigger = newTrigger()
                .withIdentity(key.getName(), key.getGroup())
                .startNow()
                .withSchedule(SimpleScheduleBuilder.simpleSchedule()
                        .withMisfireHandlingInstructionFireNow()
                        .withRepeatCount(0))
                .build();

        scheduler.scheduleJob(jobDetail, trigger);

并且我还尝试用调度程序触发:

 JobKey key = // ...
        JobDetail jobDetail = newJob(jobBean.getClass())
                .withIdentity(key)
                .storeDurably()
                .build();
        scheduler.addJob(jobDetail, true);


        scheduler.triggerJob(key, new JobDataMap(jobParams));

下面是显示延迟的侦听器日志。

2019-05-15 13:59:52,066Z  INFO  [nio-8081-exec-2] c.m.f.s.logger.SchedulingListener                  : Job added: newsJobTemplate:1557928791965
2019-05-15 13:59:52,066Z  INFO  [nio-8081-exec-2] c.m.f.s.logger.SchedulingListener                  : Job scheduled: newsJobTemplate:1557928791965
2019-05-15 14:00:18,660Z  INFO  [eduler_Worker-1] c.m.f.s.logger.TriggerStateListener                : Trigger fired: QUARTZ_JOBS.newsJobTemplate:1557928791965 {}
2019-05-15 14:00:18,703Z  INFO  [eduler_Worker-1] c.m.f.s.logger.JobExecutionListener                : Job will be executed: QUARTZ_JOBS.newsJobTemplate:1557928791965
2019-05-15 14:00:19,284Z  INFO  [eduler_Worker-1] c.m.f.s.logger.JobExecutionListener                : Job was executed: QUARTZ_JOBS.newsJobTemplate:1557928791965

共有1个答案

乜胜泫
2023-03-14

我在这里和那里发现的碎屑表明问题是与交易有关的。所以我从服务方法中删除了@transactional,瞧,它起作用了。看起来,当您调用trigger时,调度程序线程会异步地尝试从DB中查找调度和触发器,但当时事务没有提交。稍后,调度程序线程再次查找数据库,并最终找到它。

 类似资料:
  • 问题内容: 有没有一种方法可以删除带有特定作业的预定触发器?似乎删除触发器的唯一方法是删除整个作业,然后重新注册该作业并触发。 我有一份可能有100多个触发器的作业,我真的不想删除该作业,而只需要删除1个触发器就重新注册所有触发器。 另外,是否有一种方法可以在配置触发器后立即停止调度程序执行作业? 谢谢 问题答案: 尝试 这接受触发器和组名作为参数,并且只会删除指定的触发器,而不是作业。 Quar

  • 编辑:下面是list_item_view.xml

  • 我有两个节点具有相同的Quartz调度器。JobStore具有作业的唯一触发器,它每5秒执行一次,处理该作业需要一秒。

  • 在使用Quartz Scheduler 1.8.6版的应用程序中,当作业未完成时,我们遇到了一个触发器卡住的问题。 例如,我们有ssh调用或数据库查询的作业。如果这些作业挂起(因为ssh调用没有终止,或者select语句有一个表锁),那么我将无法再触发这些作业。触发器被卡住,直到我强制重新启动调度程序。 我已经试过了。中断(触发器)和调度程序。重新调度触发器()。我试着移除触发器并重新创建它。我已

  • 问题内容: 我正在尝试创建一些放置适当的说明性工具提示,用户可以单击这些提示以了解站点界面的工作方式。每个工具提示都有一个“下一个”链接,可通过修改类(因此更改为CSS)来切换上一个和下一个工具提示的可见性。 这是应该执行此操作的一些简化代码: 当我将此代码粘贴到控制台中时(或在页面加载时)立即调用(并正确切换类)。如果我将替换为,则按预期触发。我究竟做错了什么? 问题答案: 当您绑定事件时,您就

  • 我们使用quartz调度器创建一个带有触发器名称和触发器组的触发器,它将在15分钟的间隔被触发。 我们希望在任何时间点手动触发时间表。因此,我们所做的就是获取与我们创建的计划相关联的作业的触发键细节,并尝试使用以下API触发作业。 用上面提到的API激发作业时(即尝试手动激发作业)的Quartz日志: 能不能有人请让我知道我们如何才能使时间表是触发与原来的工作相关联的触发器。