实例化要在 Quartz 调度程序中执行的作业时发生错误
error occured instantiating job to be executed in Quartz sheduler
package org.quartz;
import org.quartz.Scheduler;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Trigger;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.JobBuilder.*;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;
import static org.quartz.CronScheduleBuilder.*;
import static org.quartz.CalendarIntervalScheduleBuilder.*;
import static org.quartz.DateBuilder.*;
class myJob implements Job {
public void execute(JobExecutionContext context)
throws JobExecutionException
{
System.out.println("Hello! HelloJob is executing.");
}
}
public class schedule{
public static void main(String args[]) throws Exception{
System.out.println("Java working");
try {
// Grab the Scheduler instance from the Factory
JobKey jobKeyA = new JobKey("myJob", "group1");
JobDetail jobA = JobBuilder.newJob(myJob.class)
.withIdentity(jobKeyA).build();
// Trigger the job to run now, and then every 40 seconds
Trigger trigger1 = TriggerBuilder
.newTrigger()
.withIdentity("dummyTriggerName1", "group1")
.withSchedule(
CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
.build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
// and start it off
scheduler.start();
// Tell quartz to schedule the job using our trigger
scheduler.scheduleJob(jobA, trigger1);
} catch (SchedulerException se) {
se.printStackTrace();
}
}
}
我在实例化作业时遇到错误,然后很明显作业的所有触发器都设置为错误状态。
是什么原因?
请帮助它非常重要。
给我答案。
错误
[ERROR] 28 Dec 03:03:30.008 PM
DefaultQuartzScheduler_QuartzSchedulerThread
[org.quartz.core.ErrorLogger]
实例化要执行的作业时出错。工作= 'group1.myJob'
org.quartz.SchedulerException: Problem instantiating class
'org.quartz.myJob' [See nested exception:
java.lang.IllegalAccessException: Class
org.quartz.simpl.SimpleJobFactory can not access a member of class
org.quartz.myJob with modifiers ""]
at org.quartz.simpl.SimpleJobFactory.newJob(SimpleJobFactory.java:58)
at org.quartz.simpl.PropertySettingJobFactory.newJob(PropertySettingJobFactory.java:69)
at org.quartz.core.JobRunShell.initialize(JobRunShell.java:127)
at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:375)
Caused by: java.lang.IllegalAccessException: Class
org.quartz.simpl.SimpleJobFactory can not access a member of class
org.quartz.myJob with modifiers ""
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
at java.lang.Class.newInstance(Class.java:436)
at org.quartz.simpl.SimpleJobFactory.newJob(SimpleJobFactory.java:56)
... 3 more [INFO] 28 Dec 03:03:30.013 PM
DefaultQuartzScheduler_QuartzSchedulerThread
[org.quartz.simpl.RAMJobStore]
Job group1.myJob 的所有触发器都设置为 ERROR 状态。
你的工作 class 必须是 public
。否则JobBuilder无法读取。
public class myJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Hello! HelloJob is executing.");
}
}
- Class 应该是 public class
- 默认构造函数应该是public
在上述解决方案的基础上进行改进。 class可以用static关键字来标记,提高效率。每次出现预定时段时都会创建作业。
public static class MyJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("My job is called");
}
}
package org.quartz;
import org.quartz.Scheduler;
import org.quartz.JobDetail;
import org.quartz.JobKey;
import org.quartz.Trigger;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.JobBuilder.*;
import static org.quartz.TriggerBuilder.*;
import static org.quartz.SimpleScheduleBuilder.*;
import static org.quartz.CronScheduleBuilder.*;
import static org.quartz.CalendarIntervalScheduleBuilder.*;
import static org.quartz.DateBuilder.*;
class myJob implements Job {
public void execute(JobExecutionContext context)
throws JobExecutionException
{
System.out.println("Hello! HelloJob is executing.");
}
}
public class schedule{
public static void main(String args[]) throws Exception{
System.out.println("Java working");
try {
// Grab the Scheduler instance from the Factory
JobKey jobKeyA = new JobKey("myJob", "group1");
JobDetail jobA = JobBuilder.newJob(myJob.class)
.withIdentity(jobKeyA).build();
// Trigger the job to run now, and then every 40 seconds
Trigger trigger1 = TriggerBuilder
.newTrigger()
.withIdentity("dummyTriggerName1", "group1")
.withSchedule(
CronScheduleBuilder.cronSchedule("0/5 * * * * ?"))
.build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
// and start it off
scheduler.start();
// Tell quartz to schedule the job using our trigger
scheduler.scheduleJob(jobA, trigger1);
} catch (SchedulerException se) {
se.printStackTrace();
}
}
}
我在实例化作业时遇到错误,然后很明显作业的所有触发器都设置为错误状态。 是什么原因? 请帮助它非常重要。 给我答案。 错误
[ERROR] 28 Dec 03:03:30.008 PM
DefaultQuartzScheduler_QuartzSchedulerThread
[org.quartz.core.ErrorLogger]
实例化要执行的作业时出错。工作= 'group1.myJob'
org.quartz.SchedulerException: Problem instantiating class
'org.quartz.myJob' [See nested exception:
java.lang.IllegalAccessException: Class
org.quartz.simpl.SimpleJobFactory can not access a member of class
org.quartz.myJob with modifiers ""]
at org.quartz.simpl.SimpleJobFactory.newJob(SimpleJobFactory.java:58)
at org.quartz.simpl.PropertySettingJobFactory.newJob(PropertySettingJobFactory.java:69)
at org.quartz.core.JobRunShell.initialize(JobRunShell.java:127)
at org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:375)
Caused by: java.lang.IllegalAccessException: Class
org.quartz.simpl.SimpleJobFactory can not access a member of class
org.quartz.myJob with modifiers ""
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102)
at java.lang.Class.newInstance(Class.java:436)
at org.quartz.simpl.SimpleJobFactory.newJob(SimpleJobFactory.java:56)
... 3 more [INFO] 28 Dec 03:03:30.013 PM
DefaultQuartzScheduler_QuartzSchedulerThread
[org.quartz.simpl.RAMJobStore]
Job group1.myJob 的所有触发器都设置为 ERROR 状态。
你的工作 class 必须是 public
。否则JobBuilder无法读取。
public class myJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("Hello! HelloJob is executing.");
}
}
- Class 应该是 public class
- 默认构造函数应该是public
在上述解决方案的基础上进行改进。 class可以用static关键字来标记,提高效率。每次出现预定时段时都会创建作业。
public static class MyJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("My job is called");
}
}