[java] Quartz Scheduler와 메일 알림 연동하기

Quartz Scheduler는 Java 애플리케이션에서 작업 스케줄링을 관리하기 위한 라이브러리입니다. 이 라이브러리를 사용하면 특정 시간에 작업을 실행하거나 주기적으로 반복하는 작업을 쉽게 관리할 수 있습니다.

여기서는 Quartz Scheduler와 메일 알림을 연동하는 방법에 대해 알아보겠습니다. 메일 알림을 추가하면 작업이 실행되거나 완료될 때 관련된 사람들에게 알림을 보낼 수 있습니다.

1. Maven 의존성 추가

먼저 Maven 프로젝트를 사용하는 경우, pom.xml 파일에 다음 의존성을 추가해야 합니다.

<dependencies>
    <!-- Quartz Scheduler -->
    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.3.0</version>
    </dependency>

    <!-- JavaMail API -->
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>javax.mail-api</artifactId>
        <version>1.6.2</version>
    </dependency>

    <!-- JavaMail SMTP -->
    <dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>javax.mail</artifactId>
        <version>1.6.2</version>
    </dependency>
</dependencies>

위의 의존성을 추가하면 Quartz Scheduler와 JavaMail API, SMTP 관련 라이브러리를 가져올 수 있습니다.

2. 메일 관련 설정

메일을 전송하기 위해 SMTP 서버에 연결해야 합니다. application.properties 파일에 다음과 같이 SMTP 관련 설정을 추가합니다.

# SMTP 설정
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=your-email@gmail.com
spring.mail.password=your-password
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

위의 설정에서 spring.mail.usernamespring.mail.password는 메일 발신자의 Gmail 계정 정보입니다. 이를 자신의 계정 정보로 변경해야 합니다.

3. Job 클래스 작성

Quartz Scheduler에서 실행할 작업에 대한 클래스를 작성해야 합니다. 이 클래스에서는 작업 로직 및 메일 발송 코드를 구현합니다.

import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

public class EmailJob implements Job {

    @Autowired
    private JavaMailSender mailSender;

    @Override
    public void execute(JobExecutionContext context) throws JobExecutionException {
        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message);
            helper.setTo("recipient@example.com");
            helper.setSubject("Quartz Scheduler 메일 알림");
            helper.setText("작업이 실행되었습니다.");

            mailSender.send(message);
        } catch (MessagingException e) {
            throw new JobExecutionException("Failed to send email", e);
        }
    }
}

위의 클래스에서는 JavaMailSender를 사용하여 메일을 전송하고, MimeMessageHelper를 사용하여 수신자, 제목, 내용을 설정합니다. 이 예제에서는 recipient@example.com으로 메일을 보내도록 설정되어 있습니다.

4. Quartz Scheduler 설정

마지막으로 Quartz Scheduler를 설정해야 합니다. application.java 파일에 다음과 같이 스케줄러를 설정합니다.

import org.quartz.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class QuartzConfiguration {

    @Autowired
    private SchedulerFactory schedulerFactory;

    @Bean
    public JobDetail emailJobDetail() {
        return JobBuilder.newJob(EmailJob.class)
                .withIdentity("emailJob")
                .storeDurably()
                .build();
    }

    @Bean
    public Trigger emailTrigger() {
        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0 0/5 * * * ?"); // 매 5분마다 실행
        return TriggerBuilder.newTrigger()
                .forJob(emailJobDetail())
                .withIdentity("emailTrigger")
                .withSchedule(cronScheduleBuilder)
                .build();
    }

    @Bean
    public Scheduler scheduler() throws SchedulerException {
        Scheduler scheduler = schedulerFactory.getScheduler();
        scheduler.scheduleJob(emailJobDetail(), emailTrigger());
        scheduler.start();
        return scheduler;
    }
}

위의 설정에서는 emailJobDetail() 메서드에서 EmailJob 클래스를 Job으로 등록하고, emailTrigger() 메서드에서 실행되는 시간을 설정합니다. 예시에서는 매 5분마다 실행되도록 설정되어 있습니다.

이제 Quartz Scheduler와 메일 알림이 연동되었습니다. 설정한 주기에 따라 작업이 실행되고, 해당 작업이 완료될 때 메일이 수신자에게 전송됩니다.

결론

이번 포스트에서는 Quartz Scheduler와 메일 알림을 연동하는 방법에 대해 알아보았습니다. Quartz Scheduler를 사용하면 Java 애플리케이션에서 작업 스케줄링을 관리할 수 있으며, 메일 알림을 추가하여 작업 실행 상태를 알릴 수 있습니다.