Я новичок в планировании работы.Я пытаюсь выполнить определенную задачу рекурсивным способом с помощью кварца и org.quartz.impl.StdScheduler.
У меня ниже настройки кварца и впрыска зависимости от пружины - определить серверный компонент планировщика.
Corn exp - 0 * / 5 *?* * - каждые 5 минут
Properties quartzProperties = new Properties();
quartzProperties.put("rg.quartz.scheduler.instanceName","UnicaScheduler");
quartzProperties.put("org.quartz.scheduler.skipUpdateCheck","true");
quartzProperties.put("org.quartz.threadPool.class","org.quartz.simpl.SimpleThreadPool");
quartzProperties.put("org.quartz.threadPool.threadCount","10");
quartzProperties.put("org.quartz.threadPool.threadPriority","5");
quartzProperties.put("org.quartz.scheduler.instanceId","AUTO");
quartzProperties.put("org.quartz.jobStore.misfireThreshold","60000");
quartzProperties.put("org.quartz.jobStore.class","org.quartz.impl.jdbcjobstore.JobStoreTX");
quartzProperties.put("org.quartz.jobStore.lockHandler.class","org.quartz.impl.jdbcjobstore.UpdateLockRowSemaphore");
quartzProperties.put("org.quartz.jobStore.driverDelegateClass",getDBProductName().getDriverDelegateName());
quartzProperties.put("org.quartz.jobStore.useProperties","false");
quartzProperties.put("org.quartz.jobStore.tablePrefix","QRTZ_");
quartzProperties.put("org.quartz.jobStore.selectWithLockSQL","SELECT * FROM {0}LOCKS UPDLOCK WHERE LOCK_NAME = ?");
quartzProperties.put("org.quartz.jobStore.isClustered",Boolean.toString(AMConfigDB.getInstance().isClustered()));
quartzProperties.put("org.quartz.plugin.shutdownhook.class","org.quartz.plugins.management.ShutdownHookPlugin");
quartzProperties.put("org.quartz.plugin.shutdownhook.cleanShutdown","true");
DataSource dataSource = (DataSource)applicationContext.getBean(DATASHOURCE_BEAN_NAME);
MutablePropertyValues schedulerFactoryProperties = new MutablePropertyValues();
schedulerFactoryProperties.addPropertyValue("dataSource", dataSource);
schedulerFactoryProperties.addPropertyValue("startupDelay", "10");
schedulerFactoryProperties.addPropertyValue("quartzProperties", quartzProperties);
schedulerFactoryProperties.addPropertyValue("autoStartup", "true");
LOG.debug("Starting the Scheduler factory bean with properties as " +quartzProperties);
RootBeanDefinition beanDefinition = new RootBeanDefinition(SchedulerFactoryBean.class);
beanDefinition.setPropertyValues(schedulerFactoryProperties);
DefaultListableBeanFactory beanFactory=(DefaultListableBeanFactory)applicationContext.getBeanFactory();
beanFactory.registerBeanDefinition(SCHEDULER_BEAN_NAME, beanDefinition);
beanFactory.initializeBean(beanDefinition, SCHEDULER_BEAN_NAME);
defineSchedulerServerDependencies();
// starting the scheduler..
LOG.debug("Starting the scheduler server.");
StdScheduler schedulerFactoryBean = (StdScheduler)applicationContext.getBean(SCHEDULER_BEAN_NAME);
schedulerFactoryBean.start();
LOG.warn("Scheduler metadata : " + ((StdScheduler) applicationContext.getBean(SCHEDULER_BEAN_NAME)).getMetaData().getSummary());
Я пытаюсь запустить задачу каждые 5 минут, она работает нормально и выполняется каждые 5 минут.
Скажите, я начал этов 10.00 утра, и его рекурсивное возникновение - 10.00,10.05,10.10 ... И так далее.
Проблема в том, что, если я остановлю это в промежутке, скажем, 10.16, и перезапущу его 10.21, и вот проблема,в 10.21 (после перезапуска) будет два рабочих задания для 10.21 (неожиданно), а после - 10.25 (ожидается).
Что делать, чтобы выполнить задание в 10.25, а не задание во время перезапуска,в 10.21.
Пожалуйста, помогите.