我可以使用方法而不是 class Quartz 来定义作业实例吗?
Can I define job instance using method instead of class Quartz?
我正在阅读 Quartz documentation 并试图了解我能否在内部传递 Job 实例方法而不是 class。
例如,如果 class 我需要写:
public class MyJobClass implements Job {
public MyJobClass() {
// Instances of Job must have a public no-argument constructor.
}
public void execute(JobExecutionContext context)
throws JobExecutionException {
JobDataMap data = context.getMergedJobDataMap();
System.out.println("someProp = " + data.getString("someProp"));
}
}
并定义一个作业实例,例如:
JobDetail job1 = newJob(MyJobClass.class) // what about method here
.withIdentity("job1", "group1")
.usingJobData("someProp", "someValue")
.build();
根据同样的原则,我尝试定义作业实例传递方法,如:
// define the job
JobDetail job = newJob(testMethod())
.withIdentity("job1", "group1")
.build();
方法如下:
private Class<? extends Job> testMethod() {
//...
return null;
}
但是我得到错误:
java.lang.IllegalArgumentException: Job class cannot be null.
更新:
我 return null
在方法中,因为如果我不这样做,我会得到:
你的 testMethod()
方法 returns null
。 Quartz 不接受 null 并失败。
Quartz 想要自己管理作业,所以这就是为什么你只能通过 class
而不能通过 instance
。
为什么需要提供自己的实例?如果你想让它 "persistent" 在执行之间保持状态,那么 Quartz 提供了 stateful job
概念,请参阅 http://www.quartz-scheduler.org/api/2.3.0/org/quartz/StatefulJob.html
我正在阅读 Quartz documentation 并试图了解我能否在内部传递 Job 实例方法而不是 class。
例如,如果 class 我需要写:
public class MyJobClass implements Job {
public MyJobClass() {
// Instances of Job must have a public no-argument constructor.
}
public void execute(JobExecutionContext context)
throws JobExecutionException {
JobDataMap data = context.getMergedJobDataMap();
System.out.println("someProp = " + data.getString("someProp"));
}
}
并定义一个作业实例,例如:
JobDetail job1 = newJob(MyJobClass.class) // what about method here
.withIdentity("job1", "group1")
.usingJobData("someProp", "someValue")
.build();
根据同样的原则,我尝试定义作业实例传递方法,如:
// define the job
JobDetail job = newJob(testMethod())
.withIdentity("job1", "group1")
.build();
方法如下:
private Class<? extends Job> testMethod() {
//...
return null;
}
但是我得到错误:
java.lang.IllegalArgumentException: Job class cannot be null.
更新:
我 return null
在方法中,因为如果我不这样做,我会得到:
你的 testMethod()
方法 returns null
。 Quartz 不接受 null 并失败。
Quartz 想要自己管理作业,所以这就是为什么你只能通过 class
而不能通过 instance
。
为什么需要提供自己的实例?如果你想让它 "persistent" 在执行之间保持状态,那么 Quartz 提供了 stateful job
概念,请参阅 http://www.quartz-scheduler.org/api/2.3.0/org/quartz/StatefulJob.html