티스토리 뷰
월급쟁이인 관계로 설렁설렁 일을 하고 있던 와중에 스트럿츠2를 프레임워크로 사용하고 있는 시스템에서 scheduler를 생성할 일이 생겼습니다. Spring 프레임워크 기반이 아니라서 Spring에서 처럼 간단하게 어노테이션으로 처리할 수 없어서 열심히 구글에서 검색을 해봤습니다. 검색을 해보니 Quartz2라는 라이브러리를 통해서 만들라고 하더군요. 그래서 Quartz2를 기반으로 한 scheduler를 만들어 냈습니다. 생각보다 간단했습니다. 일단 Struts2는 기본적으로 있으실거라고 생각하고 Quartz2 라이브러리부터 받아보도록 하겠습니다.
1
2
3
4
5
6 |
<!-- Quartz framework -->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.1.5</version>
</dependency> |
cs |
Maven으로 라이브러리를 관리하고 있으시다면 pom.xml 에 다음과 같이 넣어주시면 되고 Maven을 사용하지 않고 있다면
http://www.quartz-scheduler.org/downloads/
위 링크에서 라이브러리를 받은 후 WEB-INF에 있는 라이브러리가 들어가있는 lib 폴더에 넣어주면 됩니다. 그럼 본격적으로 scheduler를 만들어 보도록 하겠습니다.
1
2
3
4
5
6
7
8
9
10
11 |
package com.studioH.daemon;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class oneMinuteDaemon implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("1분에 한번씩 도는 데몬 작성 Test중...");
}
} |
cs |
위와 같이 먼저 실제 로직이 들어갈 부분부터 간단하게 만들었습니다. execute method 안에 실제로 돌아갈 로직을 작성해주면 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 |
package com.studioH.daemon;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.quartz.CronScheduleBuilder;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import com.stuiodH.daemon.oneMinuteDaemon;
public class daemonListener implements ServletContextListener {
public void contextDestroyed(ServletContextEvent arg0) {
//
}
public void contextInitialized(ServletContextEvent arg0) {
JobDetail job = JobBuilder.newJob(oneMinuteDaemon.class).withIdentity("oneMinuteDaemon", "group1").build();
try {
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("oneMinuteDaemon", "group1").withSchedule(CronScheduleBuilder.cronSchedule("0 0/1 * * * ?")).build();
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
} |
cs |
위 부분은 ServletContextListener를 상속 받은 클래스로 스트럿츠2가 서버에서 올라갈 때 무조건 먼저 실행하는 역활을 합니다. 이미 ServletContextListener를 상속 받은 클래스가 있다면 거기에 job 및 trigger를 생성해도 무방합니다. 그러면 이제 마지막으로 web.xml에 리스너를 등록해주도록 합시다.
1
2
3 |
<listener>
<listener-class>kr.co.s1.v2.web.daemon.daemonListener</listener-class>
</listener> |
cs |
이미 등록된 리스너에 job 및 trigger를 생성해줬다면 이전에 web.xml에 넣었을테니 따로 넣어줄 필요가 없을것이고 없을때에만 넣어주시면 됩니다. 데몬을 하나 더 만들어야 한다면 로직이 돌아가는 클래스를 하나 더 만든 후에 job과 trigger를 하나 더 만들어준 후 scheduler.scheduleJob으로 실행해주시면 됩니다. Cron 표기에 대한 설명은 별도의 링크로 대체하기로 하겠습니다.
http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/tutorial-lesson-06
'IT > Framework' 카테고리의 다른 글
Mybatis - Cursor is closed 해결법 (0) | 2019.07.21 |
---|---|
Spring - Static field에 Autowired 적용하기 (2) | 2018.12.08 |
Struts 버전 업그레이드 방법 (0) | 2017.04.16 |
Spring framework 시작하기(3) (0) | 2017.03.26 |
Spring framework 시작하기(2) (0) | 2017.03.26 |
- Total
- Today
- Yesterday