Задание планировщика кварца не сохранено в базе данных - PullRequest
2 голосов
/ 19 декабря 2011

Когда я использую QuartzHelper.getScheduler().checkExists(new JobKey(name,group_name)); для поиска работы в планировщике - кварц ищет ее в БД (чтобы увидеть ее, я просто удаляю таблицы и получаю исключение jdbc для этого метода).

Но тогдановое задание добавлено в планировщик, в БД нет записей.Во время выполнения задания, если я пытаюсь создать новое с тем же именем - сработало исключение.Исключение:

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

Очевидно, что вместо JDBC используется RAMJobStore.

Вопрос: что я делаю неправильно и что я могу сделать, чтобы сделать кварцхранить данные в БД?

У меня есть следующая конфигурация кварца:

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);

1 Ответ

1 голос
/ 19 декабря 2011

Похоже, что приложение использует настройки по умолчанию. Из чего возвращается объект из

QuartzHelper.getScheduler ()

...