【问题标题】:Quartz scheduler job not stored in databaseQuartz 调度程序作业未存储在数据库中
【发布时间】:2011-12-20 11:32:45
【问题描述】:

当我使用 QuartzHelper.getScheduler().checkExists(new JobKey(name,group_name)); 在调度程序中处理作业时,quartz 在 DB 中查找它(为了查看它,我只需删除表并在该方法上得到一个 jdbc 异常)。

但是新作业被添加到调度程序中,没有记录被添加到数据库中。如果我尝试创建一个具有相同名称的新作业,则作业正在运行时 - 会触发异常。例外:

Unable to store Job : 'jobname', because one already exists with this identification.
at org.quartz.simpl.RAMJobStore.storeJob(RAMJobStore.java:277)

很明显是用RAMJobStore代替了JDBC。

问题:我做错了什么,我该怎么做才能让石英在数据库中存储数据?

我有下一个石英配置:

org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.dataSource = myDS
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.isClustered = false
org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.myDS.URL = jdbc:mysql://127.0.0.1:3306/quartz
org.quartz.dataSource.myDS.user = root
org.quartz.dataSource.myDS.password = qwerty
org.quartz.dataSource.myDS.maxConnections = 10

代码如下:

JobBuilder builder = JobBuilder.newJob(ScriptBaseJob.class);
builder.withIdentity(name, GROUP_NAME);
JobDataMap dataMap = new JobDataMap(params);
builder.usingJobData(dataMap);
builder.requestRecovery(true);
builder.storeDurably(true);
JobDetail jobDetail = builder.build();

SimpleScheduleBuilder scheduleBuilder = SimpleScheduleBuilder.simpleSchedule();
scheduleBuilder.repeatForever();
scheduleBuilder.withIntervalInSeconds(60);

Trigger trigger = null;
try {
    trigger = QuartzHelper.getScheduler().getTrigger(new TriggerKey(name, GROUP_NAME));
} catch (Exception e) {
    e.printStackTrace();
}
if (trigger==null) {
    TriggerBuilder<Trigger> triggerBuilder = TriggerBuilder.newTrigger();
    triggerBuilder.withSchedule(scheduleBuilder);
    triggerBuilder.withIdentity(name, GROUP_NAME);
    trigger = triggerBuilder.build();
}

SchedulerFactory schedFact = new org.quartz.impl.StdSchedulerFactory();
Scheduler sched = schedFact.getScheduler();
sched.start();

sched.scheduleJob(jobDetail, trigger);

【问题讨论】:

    标签: java jdbc quartz-scheduler


    【解决方案1】:

    应用程序似乎使用默认设置。对象返回的形式是什么

    QuartzHelper.getScheduler()

    【讨论】:

    • 谢谢,就是这样。我必须从 Helper 类中获取调度程序实例,而 Quartz 示例中的 SchedulerFactory 是不必要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 2019-08-24
    • 2014-08-28
    相关资源
    最近更新 更多