낭만 프로그래머
Web에서 Quartz를 사용하여 스케쥴링 하기 본문
Web에서 스케쥴링하기 위해서는 Spring을 사용하는 것이 가장 좋지만 가끔은 Spring을 사용하지 않고 순수하게 JSP/Servelt만을 이용하여 프로젝트를 할 경우가 있다.
때문에 Quartz 라이브러리를 이용하게 간단하게 스케쥴링 해보자.
1. 모든 문서와 예제는 www.quartz-scheduler.org/ 에 가면 있으니 참조 하시기 바랍니다
2. Maven을 사용하여 라이브러리를 다운로드 하세요
<!-- https://mvnrepository.com/artifact/org.quartz-scheduler/quartz -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
3. web.xml 에서 Quartz를 초기화 합니다
<servlet>
<servlet-name>
QuartzInitializer
</servlet-name>
<display-name>
Quartz Initializer Servlet
</display-name>
<servlet-class>
org.quartz.ee.servlet.QuartzInitializerServlet
</servlet-class>
<load-on-startup>
1
</load-on-startup>
<init-param>
<param-name>config-file</param-name>
<param-value>/com/company/scheduler/quartz.properties
</param-value>
</init-param>
<init-param>
<param-name>shutdown-on-unload</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>wait-on-shutdown</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>start-scheduler-on-load</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>APIScheduler</servlet-name>
<servlet-class>com.company.APIScheduler</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
4. 설정을 위하여 quartz.properties 를 작업하여 web.xml에서 지정한 위치에 저장합니다
org.quartz.scheduler.instanceName = APIScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 12
org.quartz.threadPool.threadPriority = 5
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore
5. 스케쥴링 시작하는 Servlet을 작성합니다
package com.company.scheduler;
import static org.quartz.CronScheduleBuilder.cronSchedule;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import javax.servlet.http.HttpServlet;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
import com.company.scheduler.job.BillInfoJob;
public class APIScheduler extends HttpServlet {
private static final long serialVersionUID = 1L;
private SchedulerFactory schedulerFactory;
private Scheduler scheduler;
public APIScheduler() {
try {
schedulerFactory = new StdSchedulerFactory();
scheduler = schedulerFactory.getScheduler();
}
catch (SchedulerException e) {
e.printStackTrace();
}
}
@Override
public void init() {
try {
JobDetail job = newJob(BillInfoJob.class)
.withIdentity("job1", "group1")
.build();
CronTrigger trigger = newTrigger()
.withIdentity("trigger1", "group1")
.withSchedule(cronSchedule("0 0 15 * * ?")) //오후3시마다
// .withSchedule(cronSchedule("0 0/2 * * * ?")) //2분마다
.build();
scheduler.scheduleJob(job, trigger);
scheduler.start();
// scheduler.shutdown(true);
}
catch (SchedulerException e) {
e.printStackTrace();
}
}
}
6. 실제로 수행되는 Job을 작성합니다
package com.company.scheduler.job;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class BillInfoJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("=========== 작업합니다 =========");
}
}
7. 이제 서버를 구동하면 실행됩니다 ^^*
'Java > Tomcat' 카테고리의 다른 글
Tomcat 9 에서 에러(ERROR) 페이지 설정 (1) | 2022.06.30 |
---|---|
Tomcat 9 에서 외부 Directory를 URL로 매핑 (0) | 2022.04.27 |
Tomcat에서 ROOT로 Context 변경하기 (0) | 2020.01.07 |
Tomcat에서 server.xml 파일에 UTF-8 설정하기 (0) | 2019.12.30 |
Tomcat에 UTF-8로 Encoding 설정 (0) | 2015.07.07 |