본문 바로가기

For DEVELOPER

[SPRING] 스프링 scheduling 스케줄링 적용하기

728x90
반응형

1. 주기적인 작업을 수행할 클래스 생성

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
/*JobSendMail.java*/


public
 class JobSendMail {
    
    private Logger log = LogManager.getLogger(this.getClass());
    
    @Resource(name = "Batch")
    private Batch batch;
    
    public void doBatchLoad() throws JobExecutionException {
        
        SimpleDateFormat df;
        df = new SimpleDateFormat("yyyy-MM-dd");
        
        String nowDay =  df.format(new Date(System.currentTimeMillis()));
        Calendar week = Calendar.getInstance();
        week.add(Calendar.DATE , -7);
        String beforeDay = df.format(week.getTime());
        
        try {
           batch.sendMail(beforeDay, nowDay);
        } catch (NullPointerException e) {
            log.debug("NullPointerException");
        } catch (Exception e) {
            log.debug("Exception");
        };
 
 
      }    
    
    
}
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/*JobSendMailBean.java*/

package
 com.utility.bat;
 
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.springframework.scheduling.quartz.QuartzJobBean;
 
public class JobSendMailBean extends QuartzJobBean  {
 
    private JobSendMail dummyTask;
 
    @Override
    protected void executeInternal(JobExecutionContext context) throws JobExecutionException {
        dummyTask.doBatchLoad();
    }
 
    public void setDummyTask(JobSendMail dummyTask) {
        this.dummyTask = dummyTask;
    }
 
}
 
cs
 

2. @Scheduled 설정을 사용하기 위한 XML 설정

<?xml version="1.0" encoding="UTF-8"?>
<beans 
    default-lazy-init="true"
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                       http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
                        http://www.springframework.org/schema/context 
                       http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    
    
    <bean id="dummyTask14" class="com.utility.bat.JobSendMail"/>
     <bean name="dummyJob14" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"  
 p:jobClass="com.utility.bat.JobSendMailBean">
        <property name="jobDataAsMap">
            <map>
                <entry key="dummyTask" value-ref="dummyTask14"/>
            </map>
        </property>
    </bean>
    
     
    <bean id="cronTrigger14" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"
          p:jobDetail-ref="dummyJob14"
          p:startDelay="1000"
          p:cronExpression="0 0 9 ? * MON"/>
       
    <bean id="schedulerFactoryBean" 
 class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTrigger14"/>
            </list>
        </property>
    </bean>
    
</beans>
 

 

Cron Expression(크론 표현식)

크론 표현식은 스케줄을 나타내기 위한 공백으로 나누어진 6개 또는 7개의 필드로 구성된 문자열이다. (연도 표시는 옵션이다.)

<seconds> <minutes> <hours> <days of month> <months> <days of week> <years>

각각의 필드에 입력할 수 있는 허용된 값들은 다음과 같다. 

표 끝의 특수문자의 의미

, : 여러 값을 추가할 때 사용한다. ex) MON, WED, FRI
- : 값의 범위를 정할 때 사용한다. ex) 10-12
* : 필드의 모든 값을 선택할 때 사용한다.
/ : 값의 증가를 설정할 때 사용한다. 예를 들어 seconds 필드에서 0부터 14씩 증가하는 값(0, 14, 28, 42)들을 선택할 수 있다. ex)0/14
? : 설정값 없음을 나타낸다. 
L : Last의 약어로 지정 범위의 마지막 값을 표시한다. ex)5L -> 마지막 금요일 
W : Weekday의 약어로 <days of month> 필드에서 주어진 날짜에서 가장 가까운 평일을 선택할 때 사용한다. 
# : N번 째 특정 요일을 설정할 때 사용한다. ex)5#2 -> 이 달의 두번째 목요일

 

 
반응형