我正在使用石英调度程序。我可以毫无问题地以通常的方式安排工作。
代码
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);
}
}
但我必须创建一个Web应用程序,我必须使用“用户输入”来安排作业。这是我陷入困境的地方。我该怎么做呢 ?我将使用JSP。
例如 - 用户1的命令 - /home/user/load.sh -a -b -c(周一安排) 用户2的命令 - /home/user/load.sh -a -b -g(周二安排)
我可以将网页上的用户命令,日程安排等作为字符串,然后在Quartz调度程序中解析此字符串。但是,我如何首先将此字符串传递给Quartz以安排用户的工作?
只是为了让自己清楚 - 我希望用户能够定义自己的工作和日程安排。
由于
答案 0 :(得分: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
)。