Динамическая загрузка имени файла класса Java в задании Quartz - PullRequest
1 голос
/ 17 сентября 2009

У меня задание Quartz, написанное на Java, которое работает нормально, если у меня установлена ​​строка Quartz JobDetail следующим образом:

JobDetail jd = new JobDetail("FeedMinersJob", scheduler.DEFAULT_GROUP, FeedMinersScheduler.class); 

Но я хотел бы динамически загрузить класс, потому что сведения о задании хранятся в таблице базы данных. Поэтому я хочу что-то вроде этого:

JobDetail jd = new JobDetail(sj.getJobName(), scheduler.DEFAULT_GROUP, sj.getJobClassFile()); 

Где sj - объект запланированного задания, а метод sj.getJobClassFile () возвращает имя класса, определенного в sj, вместо того, чтобы задавать имя класса жестко.

Я пробовал перестановки метода Java Class.forName, но безуспешно.

Ответы [ 4 ]

1 голос
/ 17 января 2015

Я столкнулся с той же проблемой. Он ничего не выводит и тоже не выдает ошибку. Это потому, что у вашего класса заданий нет пустого конструктора. Таким образом, несмотря на то, что код правильный, в нем нет механизма для создания объекта задания. Если вы добавите пустой конструктор в свой класс Job, он будет работать.

0 голосов
/ 17 сентября 2009

Попробуйте это

try {
    Class<?> jobClass = Class.forName(sj.getJobClassFile());
    JobDetail jd = new JobDetail(sj.getJobName(), scheduler.DEFAULT_GROUP, jobClass);
} catch (ClassNotFoundException e) {
    // put here some error handling
}

А если это не сработает , пожалуйста, , дайте более подробную информацию о проблеме - ошибка компиляции, исключение во время выполнения или какая-то другая проблема.

0 голосов
/ 15 октября 2009

У меня есть это, может быть, это будет полезно для вас: (getClassName () возвращает строку)

Class<?> jobClass = Class.forName(t_job.getClassName());
if (Job.class.isAssignableFrom(jobClass)) {
        // create a job detail that is not volatile and is durable (is persistent and exists without trigger)
        JobDetail job = new JobDetail(t_job.getName(), t_job.getGroupName(), jobClass, false, true, true);
        job.setDescription(t_job.getDescription());

}
0 голосов
/ 17 сентября 2009

Насколько я понимаю, ваш код должен выглядеть так:

Class<?> jobClass = Class.forName(sj.getJobClassFile());
JobDetail jd = new JobDetail(sj.getJobName(), scheduler.DEFAULT_GROUP, jobClass);

Не могли бы вы опубликовать фрагменты кода, которые не работали?

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