简体   繁体   English

Quartz Scheduler作业未存储在数据库中

[英]Quartz scheduler job not stored in database

When I use QuartzHelper.getScheduler().checkExists(new JobKey(name,group_name)); 当我使用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). 在调度程序中照顾工作-石英在DB中寻找它(要看到它,我只需删除表并在该方法上得到一个jdbc异常)。

But then the new job is added to scheduler no records is added to DB. 但是随后将新作业添加到调度程序中,而没有记录添加到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. 显然,使用了RAMJobStore而不是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() QuartzHelper.getScheduler()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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