Статьи

Планирование работы в кварце против обсидиана

Мы часто сравниваем  Quartz  и  Obsidian  в нашем блоге, и сегодня мы увидим разницу в том, как вы запланируете задание для повторного выполнения в обеих частях программного обеспечения.

Краткое примечание о конфигурации задания

Прежде чем мы покажем API, который вы используете для Quartz и Obsidian, сначала упомяну, что использование API обычно не лучший подход к планированию работы. Quartz предоставляет механизм для настройки заданий с помощью XML, а Obsidian предоставляет полное веб-приложение  для администрирования и мониторинга,  которое позволяет планировать задания.

Тем не менее, некоторые варианты использования определенно предполагают интеграцию API, поэтому давайте продолжим.

Пример кварца

Давайте посмотрим, как выглядит планирование работы каждые полчаса в Quartz.

// First, create the scheduler
SchedulerFactory sf = new StdSchedulerFactory();
Scheduler scheduler = sf.getScheduler();

// Build up the job detail
JobDetail job = JobBuilder.newJob(HelloWorld.class)
    .withIdentity("HelloWorldJob", "HelloWorldGroup")
    .build();

// Add some configuration
job.getJobDataMap().put("planet", "Earth");

// Create the scheduler
CronScheduleBuilder schedule = CronScheduleBuilder.cronSchedule("* 0/30 * * * ?");

// Create the trigger
CronTrigger trigger = TriggerBuilder.newTrigger()
    .withIdentity("HelloWorldTrigger", "HelloWorldGroup")
    .withSchedule(schedule)
    .build();

// Schedule the job with the created trigger.
scheduler.scheduleJob(job, trigger);

scheduler.start(); // This is how you start the scheduler itself if you need to

// Later, we can shut down the scheduler 
scheduler.shutdown();

Как вы можете видеть, сначала вы должны получить ручку на экземпляре планировщика (или создать), то вы создаете  JobDetailCronScheduleBuilder и  CronTrigger, а затем вы можете , наконец , планировать саму работу.

Здесь есть несколько, казалось бы, лишних шагов, и некоторые посторонние свойства, такие как идентификаторы заданий, имена триггеров, группы триггеров и т. Д., Которые вы должны предоставить, но это основной шаблон, который вы будете использовать.

Обсидиановый пример

Теперь посмотрим, как это делается в Obsidian. Мы используем один и тот же класс заданий (предположим, что он удовлетворяет интерфейсам заданий как Кварца, так и Обсидиана), и мы будем использовать один и тот же график каждые полчаса.

// Create our configuration parameters
List<ConfigurationParameter> parameters = Arrays.asList(
         new ConfigurationParameter().withName("planet")
                                     .withType(ParameterType.STRING)
                                     .withValue("Earth")
);

// Set up the job configuration
JobCreationRequest request = new JobCreationRequest()
	.withNickname("HelloWorld")
	.withJobClass(HelloWorld.class.getName())
        .withState(JobStatus.ENABLED)
	.withSchedule("* 0/30 * * *")
        .withRecoveryType(JobRecoveryType.LAST) // how to recover failed jobs
	.withParameters(parameters);

// Now actually save this configurations, which becomes active on all schedulers.
JobDetail addedJob = new JobManager().addJob(request, "Audit User");
System.out.println("Added new job: " + addedJob );

// If you need to start an embedded scheduler, use this line to initialize it.
SchedulerStarter scheduler = SchedulerStarter.get(SchedulerMode.EMBEDDED);

// Later, we can gracefully shut down the scheduler 
scheduler.shutDown();

Как вы можете видеть, Obsidian упрощает работу и избавляется от посторонних свойств, которые не помогают вам разрабатывать и управлять своей работой. Вы просто создаете JobCreationRequest с обязательными полями выше, включая любые ConfigurationParameters, и вызываете  JobManager.addJob() конфигурацию задания и необязательного пользователя аудита, который используется для отслеживания изменений.

This API call saves your configuration to the Obsidian database, so it is instantly propagated to all schedulers in your cluster, and it outlives restarts. Many of our users take advantage of this API to perform one-time initialization of job schedules, after which they use our powerful web application to make changes as they are required.

This API was carefully designed to expose the powerful features our users demand, while still remaining simple to use. This sample will give you the basic template for how to schedule a job in Obsidian, but if you need more detail or want to use other extended features, you can check out our full Embedded API documentation.