我第一次存储作业并使用带有以下代码的 crontrigger 安排它们。
package com.generalsentiment.test.quartz;
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import java.util.Date;
import java.util.Properties;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.SchedulerMetaData;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class CronTriggerExample {
    public void run() throws Exception {
        Logger log = LoggerFactory.getLogger(CronTriggerExample.class);
        System.out.println("------- Initializing -------------------");
        Xml config = new Xml("src/hibernate.cfg.xml", "hibernate-configuration");
        Properties prop = new Properties();
        prop.setProperty("org.quartz.scheduler.instanceName", "ALARM_SCHEDULER");
        prop.setProperty("org.quartz.threadPool.class",   
                        "org.quartz.simpl.SimpleThreadPool");
        prop.setProperty("org.quartz.threadPool.threadCount", "4");
        prop.setProperty("org.quartz.threadPool
                        .threadsInheritContextClassLoaderOfInitializingThread", "true");
        prop.setProperty("org.quartz.jobStore.class", 
                          "org.quartz.impl.jdbcjobstore.JobStoreTX");
        prop.setProperty("org.quartz.jobStore.driverDelegateClass", 
                          "org.quartz.impl.jdbcjobstore.StdJDBCDelegate");
        prop.setProperty("org.quartz.jobStore.dataSource", "tasksDataStore");
        prop.setProperty("org.quartz.jobStore.tablePrefix", "QRTZ_");
        prop.setProperty("org.quartz.jobStore.misfireThreshold", "60000");
        prop.setProperty("org.quartz.jobStore.isClustered", "false");
        prop.setProperty("org.quartz.dataSource.tasksDataStore.driver", 
              config.child("session-factory").children("property").get(1).content());
        prop.setProperty("org.quartz.dataSource.tasksDataStore.URL", config.child("session-
             factory").children("property").get(2).content());
        prop.setProperty("org.quartz.dataSource.tasksDataStore.user", config.child("session-
             factory").children("property").get(3).content());
        prop.setProperty("org.quartz.dataSource.tasksDataStore.password", 
             config.child("session-factory").children("property").get(4).content());
        prop.setProperty("org.quartz.dataSource.tasksDataStore.maxConnections", "20");
        // First we must get a reference to a scheduler
        SchedulerFactory sf = new StdSchedulerFactory(prop);
        Scheduler sched = sf.getScheduler();
        System.out.println("------- Initialization Complete --------");
        System.out.println("------- Scheduling Jobs ----------------");
        // jobs can be scheduled before sched.start() has been called
        // job 1 will run exactly at 12:55 daily
        JobDetail job = newJob(SimpleJob.class).withIdentity("job2", "group2").build();
        CronTrigger trigger = newTrigger().withIdentity("trigger2", "group2")
                                          .withSchedule(cronSchedule("00 15 15 * * 
                                                         ?")).build();
        Date ft = sched.scheduleJob(job, trigger);
        System.out.println(sched.getSchedulerName());
        System.out.println(job.getKey() + " has been scheduled to run at: " + ft
                + " and repeat based on expression: "
                + trigger.getCronExpression());
        System.out.println("------- Starting Scheduler ----------------");
        /*
         * All of the jobs have been added to the scheduler, but none of the
         * jobs will run until the scheduler has been started. If you have
         * multiple jobs performing multiple tasks, then its recommended to
         * write it in separate classes, like SimpleJob.class writes
         * organization members to file.
         */
        sched.start();
        System.out.println("------- Started Scheduler -----------------");
        System.out.println("------- Waiting five minutes... ------------");
        try {
            // wait five minutes to show jobs
            Thread.sleep(300L * 1000L);
            // executing...
        } catch (Exception e) {
        }
        System.out.println("------- Shutting Down ---------------------");
        sched.shutdown(true);
        System.out.println("------- Shutdown Complete -----------------");
        SchedulerMetaData metaData = sched.getMetaData();
        System.out.println("Executed " + metaData.getNumberOfJobsExecuted() + " jobs.");
    }
    public static void main(String[] args) throws Exception {
        CronTriggerExample example = new CronTriggerExample();
        example.run();
    }
    }
详细信息存储在 Tables - QRTZ_CRON_TRIGGERS, QRTZ_JOB_DETAILS&QRTZ_TRIGGERS
我的疑问是如何安排存储在数据库中的作业。如何在 jsp 页面中显示作业列表以及如何自动触发它们。我们的是一个带有 Hibernate3 ORM 的 struts2 应用程序。我正在尝试在应用程序加载时初始化石英调度程序。但我做不到。