Java Spring启动和Quartz-作业未立即执行

Java Spring启动和Quartz-作业未立即执行,java,spring-boot,quartz-scheduler,jobs,Java,Spring Boot,Quartz Scheduler,Jobs,我正在用Spring boot配置Quartz作业。要求立即执行作业,无需附加任何计划 下面是我的代码 JobDetailFactoryBean factoryBean = new JobDetailFactoryBean(); String jobName = jobName(taskContext); factoryBean.setJobClass(MyJobClass.class); factoryBean.setDurability(true); factoryBean.setApp

我正在用Spring boot配置Quartz作业。要求立即执行作业,无需附加任何计划

下面是我的代码

JobDetailFactoryBean factoryBean = new JobDetailFactoryBean();

String jobName = jobName(taskContext);

factoryBean.setJobClass(MyJobClass.class);
factoryBean.setDurability(true);
factoryBean.setApplicationContext(applicationContext);
factoryBean.setName("Hello job");
factoryBean.setGroup("Hello job group");

JobDataMap jobData = new JobDataMap(new HashMap<>());
factoryBean.setJobDataMap(jobData);
factoryBean.afterPropertiesSet();

JobDetail job = factoryBean.getObject();
Scheduler scheduler = schedulerFactoryBean.getScheduler();
scheduler.addJob(job, replace);
scheduler.triggerJob(job.getKey());
org.quartz.scheduler.instanceName=springBootQuartzApp
org.quartz.scheduler.instanceId=AUTO
org.quartz.threadPool.threadCount=10
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.PostgreSQLDelegate
org.quartz.jobStore.useProperties=true
org.quartz.jobStore.misfireThreshold=2000
org.quartz.jobStore.tablePrefix=qrtz_
org.quartz.jobStore.isClustered=false
org.quartz.plugin.shutdownHook.class=org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownHook.cleanShutdown=TRUE
问题是,作业没有立即开火,而是作为失火指令被拾取。它正好在缺火阈值之后执行

请让我知道,如果我在配置中遗漏了什么或没有调用任何适当的API

我也有同样的问题

如果您的quartz正在使用具有以下事务的数据源:@EnableTransactionManagement。 请将@Transactional添加到代码的方法中,然后立即提交事务。
稍后,调度程序线程再次查找数据库并最终启动它。

如果您的要求是立即执行作业而不附加任何调度,那么为什么要使用Quartz调度程序?你可以用其他方法来完成这项工作!重试、任务跟踪、异步执行、计划和非计划任务的统一设计。这些功能中的大多数已经内置。简而言之,org.quartz.SchedulerListener接口的一个实现如何,然后您感兴趣的方法是“void schedulerStarted();”。因此,当您的计划程序启动时,您将获得此事件并立即执行这些操作。需要注意的是,它可能会在每次暂停调度程序后启动时调用此方法,因此您可能需要一种机制来解决此问题!org.quartz.threadPool.threadCount=10,那么在当前运行计划中还有其他作业超过10个吗?您是否在应用程序启动时执行此代码?或者从RESTAPI调用它?感谢您的回复。事务管理已经通过注释启用。然后,您可以调试它,它是在quartz add trigger上运行缓慢,还是调度程序从DB读取?