SchedulerConfiguration.java

/*
 * Copyright (C) 2024 B3Partners B.V.
 *
 * SPDX-License-Identifier: MIT
 */
package org.tailormap.api.configuration;

import io.sentry.quartz.SentryJobListener;
import jakarta.annotation.PostConstruct;
import java.lang.invoke.MethodHandles;
import org.quartz.SchedulerException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
import org.tailormap.api.scheduling.DebugLoggingJobListener;
import org.tailormap.api.scheduling.DebugLoggingTriggerListener;

@Configuration
public class SchedulerConfiguration {
  private static final Logger logger =
      LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());

  private final SchedulerFactoryBean schedulerFactoryBean;

  public SchedulerConfiguration(@Autowired SchedulerFactoryBean schedulerFactoryBean) {
    this.schedulerFactoryBean = schedulerFactoryBean;
  }

  @PostConstruct
  public void addListeners() throws SchedulerException {
    schedulerFactoryBean.getScheduler().getListenerManager().addJobListener(new SentryJobListener());
    if (logger.isDebugEnabled()) {
      // Add debug logging listeners to the scheduler
      schedulerFactoryBean.getScheduler().getListenerManager().addJobListener(new DebugLoggingJobListener());

      schedulerFactoryBean
          .getScheduler()
          .getListenerManager()
          .addTriggerListener(new DebugLoggingTriggerListener());
    }
  }
}