2011-12-19 2 views
2

Когда я использую 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) 

Очевидно, что 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); 

ответ

1

Оказывается, что приложение использует настройки по умолчанию. Что возвращаемый объект формы из

QuartzHelper.getScheduler()

+1

Спасибо, это все. Я должен взять экземпляр планировщика из класса Helper, а SchedulerFactory из примеров кварца не нужен. – Minolan