JobsRemindersScheduler.java

package com.wilzwert.myjobs.infrastructure.batch;

import lombok.extern.slf4j.Slf4j;
import org.springframework.batch.core.*;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.UUID;

@Component
@ConditionalOnProperty(name = "application.batch.enabled", havingValue = "true")
@Slf4j
public class JobsRemindersScheduler {

    private final JobLauncher jobLauncher;
    private final Job jobReminderJob;

    public JobsRemindersScheduler(JobLauncher jobLauncher, Job jobReminderJob) {
        this.jobLauncher = jobLauncher;
        this.jobReminderJob = jobReminderJob;
    }

    @Scheduled(cron = "0 0 6 * * ?") // daily at 6 am
    public void scheduleJobsReminders()  {
        JobParameters params = new JobParametersBuilder()
                .addString("run.id", UUID.randomUUID().toString(), true)
                .toJobParameters();
        try {
            JobExecution execution = jobLauncher.run(jobReminderJob, params);
            log.info("Job reminders scheduled run, started at {}, ended at {}, exited with {}", execution.getStartTime(), execution.getEndTime(), execution.getExitStatus());
        }
        catch (Exception e) {
            log.info("Job reminders scheduled throw an exception {}", e.getMessage());
        }
    }
}