I implemented the Quartz scheduler for a Java project. I also set up JDBCJobStore to store all jobs in the MySQL database so that it can resume after a restart. The problem that I am facing right now is that the scheduler does not start any tasks when the application starts. When I comment on the JDBCJobStore configuration, the scheduler works as expected, but it just does not work with the JDBCJobStore configuration. I have added classes and configuration file below. Am I missing something? Any help would be greatly appreciated.
quartz.properties
org.quartz.scheduler.instanceName=Scheduler Instance
org.quartz.scheduler.instanceId=AUTO
org.quartz.scheduler.rmi.export=false
org.quartz.scheduler.rmi.proxy=false
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=5
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix=QRTZ_
org.quartz.jobStore.dataSource=myDS
org.quartz.jobListener.listener.class=com.jobs.SchedulerJobListener
org.quartz.dataSource.myDS.driver=com.mysql.jdbc.Driver
org.quartz.dataSource.myDS.URL=jdbc:mysql://[host]:[port]/[db]?useSSL=false
org.quartz.dataSource.myDS.user=[user]
org.quartz.dataSource.myDS.password=[pass]
org.quartz.dataSource.myDS.maxConnections=30
org.quartz.dataSource.myDS.validationQuery=SELECT 1
FutureEventScheduler.java
public class FutureEventScheduler {
private Scheduler scheduler = null;
private JobDetail job;
private Trigger trigger;
private Logger logger = Logger.getLogger(FutureEventScheduler.class);
private void initialize() {
try {
scheduler = new StdSchedulerFactory().getScheduler();
job = JobBuilder.newJob(FutureEventSchedulerJob.class).withIdentity("Future Event Job", Config.getSdkName()).requestRecovery(true).storeDurably(true).build();
trigger = TriggerBuilder.newTrigger().withIdentity("Future Event Trigger", Config.getSdkName()).withSchedule(
CronScheduleBuilder.cronSchedule("*/3 * * * * ?")
).build();
} catch (SchedulerException e) {
logger.error(e.getMessage(), e);
}
}
public FutureEventScheduler() {
initialize();
}
public void start() throws SchedulerException {
scheduler.start();
try {
scheduler.scheduleJob(job, trigger);
} catch (ObjectAlreadyExistsException e) {
logger.info("Already exists in database. Will restore it. " + e.getMessage());
}
}
public void stop() throws SchedulerException {
scheduler.shutdown();
}
FutureEventSchedulerJob.java
public class FutureEventSchedulerJob implements Job {
private static Logger logger = Logger.getLogger(FutureEventSchedulerJob.class);
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
logger.debug("future job");
}
}
source
share