Class SchedulerConfig

java.lang.Object
ubic.gemma.core.config.SchedulerConfig

@Configuration @Profile("scheduler") public class SchedulerConfig extends Object
Quartz scheduler configuration for Gemma, replacing the deprecated XML applicationContext-schedule.xml.

Profile-gated on scheduler — only the production node that runs scheduled maintenance jobs activates this profile (see SpringContextUtils which adds the profile when the quartzOn setting is true). On other nodes (CLI, REST, dev), the profile is inactive, so this class and all of its @Bean methods are skipped and none of the Quartz machinery is wired.

Each trigger preserves the bean id, cron expression, and job-detail wiring from the legacy XML so external consumers (Quartz job-store records, log scrapes, runbooks) keep working. Bean references such as groupAgentSecurityContext live in applicationContext-dataSource.xml and are injected by qualifier here.

Note: SecureMethodInvokingJobDetailFactoryBean requires its targetObject to be a real bean, so every @Qualifier below names a bean that must exist for this context to start. Those names come from ubic.gemma.core.context.BeanNameGenerator, which the root @ComponentScan installs as its nameGenerator and which strips a trailing Impl — IndexerServiceImpl registers as indexerService, not indexerServiceImpl. Dropping that generator would break these qualifiers at runtime rather than at compile time.

Annotation-driven scheduling (@Scheduled) is NOT enabled here — it moved to AnnotationDrivenSchedulingConfig, which also covers the production profile. Gating it on scheduler meant every @Scheduled method was dormant on production nodes, which run production without scheduler. This class is now only about the Quartz triggers.

Author:
keshav (original XML)
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    org.springframework.scheduling.quartz.CronTriggerFactoryBean
    arrayDesignReportTrigger(ArrayDesignReportService arrayDesignReportService, org.springframework.security.core.context.SecurityContext securityContext)
    Every first of the month at 01:30.
    org.springframework.scheduling.quartz.JobDetailFactoryBean
    batchInfoJobDetail(ExpressionExperimentService expressionExperimentService, ExpressionExperimentReportService expressionExperimentReportService, AuditEventService auditEventService, org.springframework.security.core.context.SecurityContext securityContext)
     
    org.springframework.scheduling.quartz.CronTriggerFactoryBean
    batchInfoTrigger(org.quartz.JobDetail jobDetail)
    Every day at 00:30.
    org.springframework.scheduling.quartz.JobDetailFactoryBean
    ee2adUpdateJobDetail(TableMaintenanceUtil tableMaintenanceUtil, org.springframework.security.core.context.SecurityContext securityContext)
     
    org.springframework.scheduling.quartz.CronTriggerFactoryBean
    ee2adUpdateTrigger(org.quartz.JobDetail jobDetail)
    Every working day at 19:30.
    org.springframework.scheduling.quartz.JobDetailFactoryBean
    ee2cExperimentalDesignUpdateJobDetail(TableMaintenanceUtil tableMaintenanceUtil, org.springframework.security.core.context.SecurityContext securityContext)
     
    org.springframework.scheduling.quartz.CronTriggerFactoryBean
    ee2cExperimentalDesignUpdateTrigger(org.quartz.JobDetail jobDetail)
    Every working day at 19:20.
    org.springframework.scheduling.quartz.JobDetailFactoryBean
    ee2cExperimentUpdateJobDetail(TableMaintenanceUtil tableMaintenanceUtil, org.springframework.security.core.context.SecurityContext securityContext)
     
    org.springframework.scheduling.quartz.CronTriggerFactoryBean
    ee2cExperimentUpdateTrigger(org.quartz.JobDetail jobDetail)
    Every working day at 19:00.
    org.springframework.scheduling.quartz.JobDetailFactoryBean
    ee2cSampleUpdateJobDetail(TableMaintenanceUtil tableMaintenanceUtil, org.springframework.security.core.context.SecurityContext securityContext)
     
    org.springframework.scheduling.quartz.CronTriggerFactoryBean
    ee2cSampleUpdateTrigger(org.quartz.JobDetail jobDetail)
    Every working day at 19:10.
    org.springframework.scheduling.quartz.CronTriggerFactoryBean
    expressionExperimentReportTrigger(ExpressionExperimentReportService expressionExperimentReportService, org.springframework.security.core.context.SecurityContext securityContext)
    Every first of the month at 00:15.
    org.springframework.scheduling.quartz.CronTriggerFactoryBean
    gene2CsUpdateTrigger(TableMaintenanceUtil tableMaintenanceUtil, org.springframework.security.core.context.SecurityContext securityContext)
    Every day at 00:40.
    org.springframework.scheduling.quartz.CronTriggerFactoryBean
    indexExperimentsTrigger(Object indexerService, org.springframework.security.core.context.SecurityContext securityContext)
    Every working day at 23:00.
    org.springframework.scheduling.quartz.SchedulerFactoryBean
    schedulerFactoryBean(org.quartz.Trigger arrayDesignReportTrigger, org.quartz.Trigger expressionExperimentReportTrigger, org.quartz.Trigger gene2CsUpdateTrigger, org.quartz.Trigger batchInfoTrigger, org.quartz.Trigger ee2cExperimentUpdateTrigger, org.quartz.Trigger ee2cSampleUpdateTrigger, org.quartz.Trigger ee2cExperimentalDesignUpdateTrigger, org.quartz.Trigger ee2adUpdateTrigger, org.quartz.Trigger indexExperimentsTrigger)
    Main Quartz entry point.

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • SchedulerConfig

      public SchedulerConfig()
  • Method Details

    • schedulerFactoryBean

      @Bean public org.springframework.scheduling.quartz.SchedulerFactoryBean schedulerFactoryBean(@Qualifier("arrayDesignReportTrigger") org.quartz.Trigger arrayDesignReportTrigger, @Qualifier("expressionExperimentReportTrigger") org.quartz.Trigger expressionExperimentReportTrigger, @Qualifier("gene2CsUpdateTrigger") org.quartz.Trigger gene2CsUpdateTrigger, @Qualifier("batchInfoTrigger") org.quartz.Trigger batchInfoTrigger, @Qualifier("ee2cExperimentUpdateTrigger") org.quartz.Trigger ee2cExperimentUpdateTrigger, @Qualifier("ee2cSampleUpdateTrigger") org.quartz.Trigger ee2cSampleUpdateTrigger, @Qualifier("ee2cExperimentalDesignUpdateTrigger") org.quartz.Trigger ee2cExperimentalDesignUpdateTrigger, @Qualifier("ee2adUpdateTrigger") org.quartz.Trigger ee2adUpdateTrigger, @Qualifier("indexExperimentsTrigger") org.quartz.Trigger indexExperimentsTrigger)
      Main Quartz entry point. The trigger list mirrors exactly what the legacy XML wired — the commented-out viewTrigger and monitorSpaceTrigger from the XML remain out of scope here.
    • batchInfoTrigger

      @Bean(name="batchInfoTrigger") public org.springframework.scheduling.quartz.CronTriggerFactoryBean batchInfoTrigger(@Qualifier("batchInfoJobDetail") org.quartz.JobDetail jobDetail)
      Every day at 00:30.
    • batchInfoJobDetail

      @Bean(name="batchInfoJobDetail") public org.springframework.scheduling.quartz.JobDetailFactoryBean batchInfoJobDetail(ExpressionExperimentService expressionExperimentService, ExpressionExperimentReportService expressionExperimentReportService, AuditEventService auditEventService, @Qualifier("groupAgentSecurityContext") org.springframework.security.core.context.SecurityContext securityContext)
    • expressionExperimentReportTrigger

      @Bean(name="expressionExperimentReportTrigger") public org.springframework.scheduling.quartz.CronTriggerFactoryBean expressionExperimentReportTrigger(ExpressionExperimentReportService expressionExperimentReportService, @Qualifier("groupAgentSecurityContext") org.springframework.security.core.context.SecurityContext securityContext)
      Every first of the month at 00:15.
    • arrayDesignReportTrigger

      @Bean(name="arrayDesignReportTrigger") public org.springframework.scheduling.quartz.CronTriggerFactoryBean arrayDesignReportTrigger(ArrayDesignReportService arrayDesignReportService, @Qualifier("groupAgentSecurityContext") org.springframework.security.core.context.SecurityContext securityContext)
      Every first of the month at 01:30.
    • gene2CsUpdateTrigger

      @Bean(name="gene2CsUpdateTrigger") public org.springframework.scheduling.quartz.CronTriggerFactoryBean gene2CsUpdateTrigger(TableMaintenanceUtil tableMaintenanceUtil, @Qualifier("groupAgentSecurityContext") org.springframework.security.core.context.SecurityContext securityContext)
      Every day at 00:40.
    • ee2cExperimentUpdateTrigger

      @Bean(name="ee2cExperimentUpdateTrigger") public org.springframework.scheduling.quartz.CronTriggerFactoryBean ee2cExperimentUpdateTrigger(@Qualifier("ee2cExperimentUpdateJobDetail") org.quartz.JobDetail jobDetail)
      Every working day at 19:00.
    • ee2cExperimentUpdateJobDetail

      @Bean(name="ee2cExperimentUpdateJobDetail") public org.springframework.scheduling.quartz.JobDetailFactoryBean ee2cExperimentUpdateJobDetail(TableMaintenanceUtil tableMaintenanceUtil, @Qualifier("groupAgentSecurityContext") org.springframework.security.core.context.SecurityContext securityContext)
    • ee2cSampleUpdateTrigger

      @Bean(name="ee2cSampleUpdateTrigger") public org.springframework.scheduling.quartz.CronTriggerFactoryBean ee2cSampleUpdateTrigger(@Qualifier("ee2cSampleUpdateJobDetail") org.quartz.JobDetail jobDetail)
      Every working day at 19:10.
    • ee2cSampleUpdateJobDetail

      @Bean(name="ee2cSampleUpdateJobDetail") public org.springframework.scheduling.quartz.JobDetailFactoryBean ee2cSampleUpdateJobDetail(TableMaintenanceUtil tableMaintenanceUtil, @Qualifier("groupAgentSecurityContext") org.springframework.security.core.context.SecurityContext securityContext)
    • ee2cExperimentalDesignUpdateTrigger

      @Bean(name="ee2cExperimentalDesignUpdateTrigger") public org.springframework.scheduling.quartz.CronTriggerFactoryBean ee2cExperimentalDesignUpdateTrigger(@Qualifier("ee2cExperimentalDesignUpdateJobDetail") org.quartz.JobDetail jobDetail)
      Every working day at 19:20.
    • ee2cExperimentalDesignUpdateJobDetail

      @Bean(name="ee2cExperimentalDesignUpdateJobDetail") public org.springframework.scheduling.quartz.JobDetailFactoryBean ee2cExperimentalDesignUpdateJobDetail(TableMaintenanceUtil tableMaintenanceUtil, @Qualifier("groupAgentSecurityContext") org.springframework.security.core.context.SecurityContext securityContext)
    • ee2adUpdateTrigger

      @Bean(name="ee2adUpdateTrigger") public org.springframework.scheduling.quartz.CronTriggerFactoryBean ee2adUpdateTrigger(@Qualifier("ee2adUpdateJobDetail") org.quartz.JobDetail jobDetail)
      Every working day at 19:30.
    • ee2adUpdateJobDetail

      @Bean(name="ee2adUpdateJobDetail") public org.springframework.scheduling.quartz.JobDetailFactoryBean ee2adUpdateJobDetail(TableMaintenanceUtil tableMaintenanceUtil, @Qualifier("groupAgentSecurityContext") org.springframework.security.core.context.SecurityContext securityContext)
    • indexExperimentsTrigger

      @Bean(name="indexExperimentsTrigger") public org.springframework.scheduling.quartz.CronTriggerFactoryBean indexExperimentsTrigger(@Qualifier("indexerService") Object indexerService, @Qualifier("groupAgentSecurityContext") org.springframework.security.core.context.SecurityContext securityContext)
      Every working day at 23:00. The indexerService bean is IndexerServiceImpl, named by the scan's BeanNameGenerator (see the class comment). The legacy XML referenced it by the same id, so this is a verbatim port.