in src/main/groovy/quartz/QuartzGrailsPlugin.groovy [285:327]
void refreshJobs(ignoreErrors=false) {
def pluginEnabled = grailsApplication.config.getProperty('quartz.pluginEnabled')?.toBoolean()
if (pluginEnabled == null) {
pluginEnabled = true
}
if(pluginEnabled) {
def quartzScheduler = applicationContext.quartzScheduler
Set<JobKey> jobKeys = applicationContext.quartzScheduler.getJobKeys(GroupMatcher.anyGroup())
//Remove any recently removed / disabled Jobs
jobKeys.each { JobKey key ->
def match = grailsApplication.jobClasses.find{ GrailsJobClass jobClass -> jobClass.isEnabled() && jobClass.group == key.group && jobClass.clazz.name == key.name }
if(!match) {
log.info("Removing No longer Active Job: ${key.name}")
def triggersForJob = quartzScheduler.getTriggersOfJob(key)?.collect{it.key}
if(triggersForJob) {
//clean up triggers before we remove the job
quartzScheduler.unscheduleJobs(triggersForJob)
}
quartzScheduler.deleteJob(key)
}
}
//Add new jobs
grailsApplication.jobClasses.findAll{GrailsJobClass jobClass -> jobClass.isEnabled()}.each { GrailsJobClass jobClass ->
try {
scheduleJob(jobClass, applicationContext, hasHibernate(manager))
def clz = jobClass.clazz
clz.scheduler = applicationContext.quartzScheduler
clz.grailsJobClass = jobClass
} catch(ex) {
if(ignoreErrors) {
log.error("Error Scheduling Job Class ${jobClass} - ${ex.message}",ex)
} else {
throw ex
}
}
}
}
}