简体   繁体   中英

Quartz scheduler job not stored in database

When I use QuartzHelper.getScheduler().checkExists(new JobKey(name,group_name)); to look after a job in scheduler - quartz looks for it in DB (to see it I simply remove tables and got an jdbc exception on that metod).

But then the new job is added to scheduler no records is added to DB. While the job is running if I trying to make a new one with same name - exception is fired. The exception:

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

It is clearly that RAMJobStore is used instead of JDBC.

Question: what I am doing wrong and what can I do to make quartz store data in DB?

I've got next quartz config:

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

Here is the code:

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

It appears that application uses default setting. What does the object returned form from

QuartzHelper.getScheduler()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM