将参数数组传递给Quartz Scheduler

时间:2015-06-09 15:27:07

标签: java command-line-arguments quartz-scheduler

我正在尝试将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

中的命令行参数

3 个答案:

答案 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
    }
}