我正在尝试将Quartz Scheduler添加到现有的Java类中。
该类使用String[]
args作为main函数的输入。
public static void main(String[] args) {
//validate(args);
summarizeData(args);
}
但是Java类实现了Job
,它必须使用只需要一个参数的execute
方法。
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// How to get the String[] args and pass it to this execute method?
// Then I can pass it to the next helper functions, etc.
// summarizeData(args);
}
有什么建议吗?
编辑1:args应该是String
答案 0 :(得分:0)
在这种情况下,根据传入的参数类型(以及您正在创建的类),创建新的静态类变量并在main
中设置它们可能更有利。如果需要非静态变量,可能需要修改类构造函数和accessor / mutator(getter / setter)方法来设置它们。
选项I - 静态变量?
只有在类的所有实例中变量都相同时,这才有效!!
另外,我并不确切知道Quartz是如何工作的,所以请注意代码注释中的警告。
public class YourClass extends Job
{
// Your other class variables
// New static variables
private static String someVariable;
private static String someOtherVariable;
public static void main(String[] args) {
someVariable = args[0]; //<---- Set class variables
someOtherVariable = args[1];
// Do other stuff
}
// WARNING: If main isn't called (from any instance) before execute
// the class variables will still be null
public void execute(JobExecutionContext arg0) throws JobExecutionException {
// Do stuff with someVariable and someOtherVariable
System.out.println(someVariable + " " + someOtherVariable);
}
}
选项II - 非静态变量
根据您的实施情况,您可能希望将变量设置在main
之外,以便它们不是静态的。在这种情况下,只需创建非静态类变量并修改构造函数,以便在创建对象时设置它们(和/或添加accessor / mutator(getter / setter)方法以在初始化后修改变量)。
由于我不知道你是如何使用这门课程的,所以我不知道上述哪两个选项最适合。
答案 1 :(得分:0)
问题解决了。
我必须将命令行参数映射到调度程序类中的JobDataMap
。然后在getJobDataMap()
方法中使用.execute
来检索参数并将它们放回String[]
。
答案 2 :(得分:0)
您可以将对象添加到调度程序上下文
scheduler.getContext().put("arg1", "value1"); //or loop through your args
然后检索它:
public void execute(JobExecutionContext arg0) throws JobExecutionException {
String arg1 = null;
try {
arg1 = (String)jobExecutionContext.getScheduler().getContext().get("arg1");
//Do something
} catch (SchedulerException e) {
//Error management
}
}