Выполнение задания Quartz с именем класса Java, хранящимся в базе данных - PullRequest
0 голосов
/ 06 июля 2010

У меня есть две работы в Кварце, которые будут отлично работать, но я нахожу, что должен использовать такой код:

jd = new JobDetail(sj.getJobName(), scheduler.DEFAULT_GROUP, PollJob.class);
ct = new CronTrigger(sj.getJobTrigger(), scheduler.DEFAULT_GROUP, "0 20 * * * ?");
        scheduler.scheduleJob(jd, ct);

Мне нужно жестко закодировать PollJob.class, чтобы запустить задание, а sj - это объект, считанный из базы данных, содержащей сведения о PollJob. Но я бы также хотел установить PollJob.class из базы данных. Я пытался привести в класс по:

Class cls = Class.forName(sj.getJobJavaClassFile());
jd = new JobDetail(sj.getJobName(), scheduler.DEFAULT_GROUP, cls));

И использование ссылки на класс непосредственно как:

    jd = new JobDetail(sj.getJobName(), scheduler.DEFAULT_GROUP, Class.forName sj.getJobJavaClassFile()));

Но работа просто не выполняется. Нет сгенерированных исключений, которые я вижу, и нет трассировки стека?

Я использую JVM в Windows 7.

Есть идеи?

Мистер Морган.

1 Ответ

0 голосов
/ 09 декабря 2013

Я предполагаю, что вы сохранили класс в своей базе данных в виде строки, и вы пытаетесь превратить его в класс?У меня была та же проблема.

Детали задания, которое мне нужно создать, представлены в объекте BatchJobDto.Он содержит такие вещи, как имя задания, имя класса в виде строки и так далее.В частности, batchJobDto.getClassName () возвращает строку, которая является полностью определенным именем моего класса работы («com.foo.bar.MyJob» или что-то еще).Я создаю триггер, получаю класс из String и создаю задание.Последовательность получения класса из String:

Class<? extends Job> jobClass = null;
try {
    jobClass = (Class<? extends Job>)
                  Class.forName(batchJobDto.getClassName());
} catch(ClassNotFoundException e) {
    logger.error("createJob(): ClassNotFoundException on job class {} - {}",
        batchJobDto.getClassName(), e.getMessage());
} catch(Exception e) {
    logger.error("createJob(): Exception on job class {} - {}",
        batchJobDto.getClassName(), e.getMessage());
}

Регистрация ведется с помощью slf4j, что позволяет использовать параметризованное сообщение ("{}", как указано выше).

Там есть неконтролируемое приведение, но если ваша строка имени класса описывает класс, который является заданием Quartz (реализует Job), то я считаю, что он всегда должен работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...