gpt4 book ai didi

java - 使用 JDBC JobStore 的 Quartz 调度器

转载 作者:行者123 更新时间:2023-11-29 03:45:09 24 4
gpt4 key购买 nike

我第一次存储作业并使用 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();
}
}

详细信息存储在表中 - QRTZ_CRON_TRIGGERSQRTZ_JOB_DETAILSQRTZ_TRIGGERS

我的疑问是如何安排存储在数据库中的作业。如何在 jsp 页面中显示作业列表以及如何自动触发它们。我们的是一个带有 Hibernate3 ORM 的 struts2 应用程序。我正在尝试在应用程序加载时初始化 quartz 调度程序。但是我做不到。

最佳答案

Date ft = sched.scheduleJob(job, trigger);

当它被调用时,你的工作将被安排在下一个开火时间。计划的作业将存储在适当的数据库表中。要在 jsp 上显示作业列表,您应该保留您的作业键以及您的作业对另一个数据库表的自定义描述,以便在检索期间您可以检索此自定义描述以及数据 Quartz 持久保存到它自己的表中.自动触发此作业是 Quartz 为您处理的事情。一旦将 crone 表达式设置为所需的并且您的 Job 类实现了 org.quartz.Job,Quartz 将在您期望的下一次触发时间运行 execute() 方法

关于java - 使用 JDBC JobStore 的 Quartz 调度器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11306354/

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