Guice + Quartz + iBatis - PullRequest
       25

Guice + Quartz + iBatis

1 голос
/ 06 апреля 2010

Я пытаюсь соединить Guice (Java), Quartz scheduler и iBatis ( iBaGuice ), чтобы сделать следующее:

  1. Запустите утилиту-сканер командной строки, используя main()
  2. Периодически проверять каталог (предоставляется в качестве аргумента) на наличие файлов, содержащих форматированный вывод (XML или YAML)
  3. При обнаружении файла, анализ и вывод результата в базу данных

Проблемы:

  1. Я использовал этот пример , чтобы связать Guice и Quartz. Однако я упускаю некоторые важные детали, о которых я спрашиваю в комментариях, но пост несколько устарел, поэтому я цитирую его и здесь:
  1. Не очевидно, как настроить планировщик. Куда и как мне подключить Trigger (я могу использовать Trigger#makeMinutelyTrigger)?
  2. У меня действительно есть только один тип задания, которое я буду выполнять, я понимаю, что подробности в JobFactory # newJob берутся из параметра TriggerFiredBundle, но куда / как мне это подключить? И где / как я могу создать или проволочную бетонную работу?

P.S. Я получил немного дальше, создав и подключив ScheduleProvider. Теперь я застрял с тем, как на самом деле запланировать работу в следующем фрагменте. Кажется, мой JobFactory#newJob метод никогда не вызывается

public class CollectorServiceImpl implements CollectorService {
Scheduler scheduler;

/**
 * @throws SchedulerException
 */
@Inject
public CollectorServiceImpl(final SchedulerFactory factory, final GuiceJobFactory jobFactory)
        throws SchedulerException {
    scheduler = factory.getScheduler();
    scheduler.setJobFactory(jobFactory);
}

/**
 * @throws SchedulerException
 * @see teradata.quantum.reporting.collector.service.CollectorService#start()
 */
@Override
public void start() throws SchedulerException {
    Trigger trigger = TriggerUtils.makeMinutelyTrigger("MIN_TRIGGER");
    scheduler.scheduleJob(trigger); // this fails trigger validation since no job name is provided
    scheduler.start();
}

}

Ответы [ 2 ]

2 голосов
/ 07 апреля 2010

Суть вашей проблемы в том, что вы на самом деле не планируете занятие:

getScheduler().scheduleJob(new JobDetail("myFooJob", null, FooJob.class),
        TriggerUtils.makeMinutelyTrigger("MIN_TRIGGER"));

полный ответ и демонстрационный код на http://www.codesmell.org/blog/2009/01/quartz-fits/

0 голосов
/ 06 апреля 2010

Вам действительно нужно планирование или просто выполнение повторяющихся задач с фиксированными интервалами? Если позже, посмотрите на сборку Java в ExecutorService, особенно ScheduledThreadPoolExecutor. Сохраняет целый фреймворк для чего-то довольно простого:)

...