1

我正在使用石英调度程序。而且我可以毫无问题地以通常的方式安排工作。

代码

public class QuartzTest implements Job {

    public void execute(JobExecutionContext context)
            throws JobExecutionException {
                System.out.println("Hello Quartz on " + new Date());
            }

    public static Scheduler scheduler;

    public void scheduleLoad(String time, int jobNo) {
        try {
            // Transform user input into a date
            SimpleDateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy:HH:mm:ss");
            Date scheduleDate = dateFormat.parse(time);

            // Grab the Scheduler instance from the Factory 
            //Scheduler 
            scheduler = StdSchedulerFactory.getDefaultScheduler();

            // Listener
            //scheduler.getListenerManager().addJobListener(new SimpleJobListener());

            // and start it if it is shut down
            if(!scheduler.isStarted())
                scheduler.start();

            // Define a job and tie it to a class
            JobDetail job = newJob(QuartzTest.class)
                    .withIdentity("job"+jobNo)
                    .build();

            // Define trigger 
            SimpleTrigger trigger = (SimpleTrigger) newTrigger()
                    .startAt(scheduleDate)
                    .forJob("job"+jobNo)
                    .build();

            // Schedule job using trigger
            scheduler.scheduleJob(job, trigger);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws SchedulerException {
        String runTime = "04/15/2013:17:37:10";
        QuartzTest quartz = new QuartzTest();
        quartz.scheduleLoad(runTime,1);
        String runTime2 = "04/15/2013:17:37:15";
        quartz.scheduleLoad(runTime2,2);
        String runTime3 = "04/15/2013:17:37:20";
        quartz.scheduleLoad(runTime3,3);
    }
}

但我必须创建一个网络应用程序,在其中我必须使用“用户输入”来安排工作。这就是我卡住的地方。我该怎么做呢 ?我将使用 JSP。

例如-用户 1 的命令- /home/user/load.sh -a -b -c(安排在星期一) 用户 2 的命令- /home/user/load.sh -a -b -g(安排在星期二)

我可以从网页中获取用户的命令、计划日期等作为字符串,然后稍后在 Quartz 调度程序中解析该字符串。但是我如何首先将这个字符串传递给 Quartz 来安排用户的工作?

只是为了让自己清楚- 我希望用户能够定义自己的工作和时间表。

谢谢

4

1 回答 1

0

您需要一个HttpServlet在应用程序web.xml文件中注册的扩展类。再次,查看wiki,了解如何执行此操作

@WebServlet("/jobs") // only with Servlet 3.0  
public class SchedulerServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // get input parameter
        String time = request.getParameter("time");
        // validate that it is not null/empty and is valid time (custom method)
        if (time != null && !time.isEmpty() && isValidTime(time)) {
            int jobNo = ... // generate job no
            YourJobScheduler scheduler = ... // get scheduler
            JobDetails jobDetails = scheduler.scheduleLoad(time, jobNo); // maybe this return details of the scheduled job

            request.setAttribute("jobDetails", jobDetails);             
            // do something with response
            request.getRequestDispatcher("/WEB-INF/ShowJobDetails.jsp").forward(request, response);
        }

        // missing input parameter, so send error 
    }
}

此类将获取输入参数time,对其进行验证,然后将其传递给您的调度程序,这基本上是您在问题中使用的方法,除了它可能返回一个包含您刚刚安排的作业的详细信息的对象。如果将该对象添加到请求属性中,则可以在视图中显示它(作为jsp)。

于 2013-04-15T13:43:56.240 回答