티스토리 뷰

구글차트로 방문자수를 일주일 단위로 집계하려고 하다 보니 매주 월요일 0시가 되면 방문자수가 카운트되는 DB가 초기화가 되게 해야되서 스케쥴러를 찾다가 쿼츠 스케쥴러를 찾았다.

(사실 스프링에 @scheduled 라는 스케쥴러를 지원하는 어노테이션이 있지만 나중에야 알았다....-_-)

 

 

 

 

1. Maven에 의존 라이브러리 주입(pom.xml)

그룹아이디 : org.quartz-scheduler

아티팩트아이디 : quartz

 

 

 

 

 

2. QuartzJobBean추상클래스를 상속받아 executeInternal()메서드를 오버라이딩 하는 클래스를 작성한다. 이 메서드에 스케쥴러가 돌아가는 시점에 수행 할 코드(작업)를 정의한다.

BoardService라는 객체는 sql을 수행하는 dao단을 호출하는 비즈니스 로직 클래스이다.(스프링 설정정보가 있는 xml에 bean으로 정의되어 있음)

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
package com.choon.framework;
 
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.scheduling.quartz.QuartzJobBean;
 
import com.choon.service.BoardService;
 
public class QuartzBean extends QuartzJobBean{
        
        private BoardService boardService;
        
         @Autowired
         public void setBoardService(BoardService boardService) {
                this.boardService = boardService;
         }
 
 
        
        @Override
        protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
                this.boardService.updateVisitCountInit();
        }
 
}
 
 

 

 

 

 

 

 

3. 스프링 xml설정을 한다.

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
<!-- 1.대상이 되는 클래스 정의 -->
    <bean id="jobDetailBean" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass" value="com.choon.framework.QuartzBean"/>
         <property name="jobDataAsMap">
            <map>
                <entry key="boardService" value-ref="boardService"></entry> 
                           <!-- 쿼츠 클래스에서 db사용을 위한 객체전달 -->
            </map>
        </property>
    </bean>
    
    <!-- 2. Cron 시간 설정 -->
    <bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
        <property name="jobDetail" ref="jobDetailBean"/>
        <!-- <property name="cronExpression" value="*/10 * * * * ?" /> -->
        <property name="cronExpression" value="0 59 23 ? * SUN" />
    </bean>
    
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    <property name="triggers">
        <list>
            <ref bean="cronTrigger"/>
        </list>
    </property>
    </bean>

 

간단한 것 같지만 이틀동안 헤멧다....이제 잊어먹지 말아야지..

Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday