gpt4 book ai didi

java - Quartz 调度程序无法启动 cron 作业

转载 作者:行者123 更新时间:2023-12-01 16:06:01 25 4
gpt4 key购买 nike

您好,我正在使用 Quartz 调度程序来触发需要执行大量 Activity 的 cron。我的代码如下:

在 InitServlet 类的 init() 方法中,我定义了 TimerServer

    public class InitServlet extends HttpServlet {
public void init(ServletConfig config) throws ServletException {
try {
System.out.println("Starting the CRON");
//Set the DSO Handler CRON
TimerServer task = TimerServer.getInstance();
task.setTask();
} catch (Exception ex) {
System.out.println("Failed to start the cron");
ex.printStackTrace();
}
}

在我的 TimerServer 类中,我有以下方法

    public void setTask() {
try{
this.setSubscriptionDailyJob();
} catch(SchedulerException ex) {
log.error("SchedulerException: "+ex.getMessage(), ex);
}

private void setSubscriptionDailyJob() throws SchedulerException {
log.info("Step 1 ");

Scheduler scheduler = schedulerFactory.getScheduler();
log.info("Step 2 ");

JobDetail subscriptionJob = new JobDetail("subscription", "subscriptiongroup", SubscriptionDaily.class);
log.info("Step 3 ");
// Initiate CronTrigger with its name and group name
CronTrigger subscriptionCronTrigger = new CronTrigger("subscriptionCronTrigger", "subscriptionTriggerGroup");

try {
log.info("Subscription cron: "+Constants.SUBSCRIPTION_CRON);
// setup CronExpression
CronExpression cexp = new CronExpression(Constants.SUBSCRIPTION_CRON);
// Assign the CronExpression to CronTrigger
subscriptionCronTrigger.setCronExpression(cexp);
} catch (Exception ex) {
log.warn("Exception: "+ex.getMessage(), ex);
}
scheduler.scheduleJob(subscriptionJob, subscriptionCronTrigger);
scheduler.start();
}

在我的 SubscriptionDaily 类(class)中:

public class SubscriptionDaily implements Job {    
public void execute(JobExecutionContext arg0) throws JobExecutionException {
//Actions to be performed
}
}

现在检查我的日志,我得到了步骤 1、步骤 2,但没有进一步的结果。

我的代码被困在 TimerServer 类本身。发送到调度程序的日志是:

17:24:43 INFO  [TimerServer]: Step 1       
17:24:43 INFO [SimpleThreadPool]: Job execution threads will use class loader of thread: http-8080-1
17:24:43 INFO [SchedulerSignalerImpl]: Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl
17:24:43 INFO [QuartzScheduler]: Quartz Scheduler v.1.6.5 created.
17:24:43 INFO [RAMJobStore]: RAMJobStore initialized.
17:24:43 INFO [StdSchedulerFactory]: Quartz scheduler 'DefaultQuartzScheduler' initialized from default resource file in Quartz package: 'quartz.properties'
17:24:43 INFO [StdSchedulerFactory]: Quartz scheduler version: 1.6.5 17:24:43 INFO [TimerServer]: Step 2

我认为缺少一个日志条目:[QuartzScheduler]:调度程序 DefaultQuartzScheduler_$_NON_CLUSTERED 已启动。

请帮忙。

最佳答案

我没有在我的库中包含 common-collections jar,尽管我的应用程序中没有因此而抛出任何错误或异常。所以我很茫然!!

在此之前我从未见过 Java 如此愚蠢。这是java的正确行为还是我对它期望太高?

我还在我的应用程序中使用 Spring,Spring 提供了一种很好且简单的方法来通过 bean 处理 Quartz 和 Java 的 TimerTask 功能。很少有好的和优雅的教程是: http://static.springsource.org/spring/docs/1.2.9/reference/scheduling.html http://www.javaranch.com/journal/200711/combining_spring_and_quartz.html

虽然使用bean方法的限制是,你必须在spring xml文件中硬编码cron值,所以我们会失去灵 active 。

关于java - Quartz 调度程序无法启动 cron 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2584679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com