1

我有一个用 Java 编写的 Quartz 作业,如果我将 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

4 回答 4

1

我遇到了同样的问题。它不输出任何东西,也不会抛出错误。这是因为您的作业类没有空构造函数。所以即使代码是正确的,它也没有创建作业对象的机制。如果您向 Job 类添加一个空的构造函数,它将起作用。

于 2015-01-16T21:56:20.307 回答
0

据我了解,您的代码应如下所示:

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

您能否发布不起作用的代码片段?

于 2009-09-17T13:37:54.203 回答
0

尝试这个

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
}

如果它不起作用,提供有关问题的更多详细信息 - 编译错误、运行时异常或其他问题。

于 2009-09-17T14:39:59.903 回答
0

我有这个,也许对你有用:(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());

}
于 2009-10-15T17:39:51.723 回答