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.username
과 spring.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 애플리케이션에서 작업 스케줄링을 관리할 수 있으며, 메일 알림을 추가하여 작업 실행 상태를 알릴 수 있습니다.