2011-12-19 34 views
2

当我使用QuartzHelper.getScheduler().checkExists(new JobKey(name,group_name));在调度作业后看 - 石英查找它在DB(看到它,我只是删除表,并获得对梅托德的JDBC除外)。Quartz调度作业未存储在数据库中

但随后的新作业添加到调度没有记录被添加到数据库中。如果我尝试制作一个具有相同名称的新作业,那么作业正在运行 - 异常被解雇。例外:

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

谢谢,仅此而已。我必须从辅助类调度实例,并从石英例子SchedulerFactory是不必要的。 – Minolan 2011-12-20 09:23:43

相关问题