티스토리 뷰

Spring scheduler를 이용하여 주기적인 Processing을 처리할 일이 생겼습니다. 

예전같으면 linux scheduler인 crontab에 등록하여 실행할 script를 처리하여 작성했지만 이번프로젝트는 처음으로 java를 이용한

스케쥴러를 구현하게 되었습니다.


step1. applicationContext 설정

scheduler 및 annotation을 위한  설정을 합니다.

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/task 
        http://www.springframework.org/schema/task/spring-task.xsd">		
    ...


	<!-- Activates @Scheduled and @Async annotations for scheduling -->
	<task:annotation-driven />

</beans>


step2. scheduler 적용

@Scheduled는 메소드 단위로 사용 가능하며 실행 주기 정의를 위한 'fixedDelay', 'fixedRate', 'cron'과 같은 속성들을 제공하고 있으며 @Scheduled 메소드에 대한 실행은 TaskScheduler가 담당합니다.

@Scheduled(fixedDelay=5000)

public void printWithFixedDelay() {

    System.out.println("execute printWithFixedDelay() of Annotated PrintTask at " 

        + new Date());

}


@Scheduled(fixedRate=10000)

public void printWithFixedRate() {

    System.out.println("execute printWithFixedRate() of Annotated PrintTask at " 

        + new Date());

}       


@Scheduled(cron="*/5 * * * * MON-FRI")

public void printWithCron() {

    System.out.println("execute printWithCron() of Annotated PrintTask at " 

        + new Date());

}




참고 -  Asynchronous Execution

@Async는 메소드 단위로 사용 가능하며 비동기적으로 특정 메소드를 실행하고자 할 때 사용할 수 있습니다. @Async 메소드에 대한 실제적인 실행은 TaskExecutor에 의해 처리됩니다.

@Async
public void printWithAsync() throws Exception {
    System.out.println("execute printWithAsync() of AsyncPrintTask at " 
        + new Date());
    Thread.sleep(5000);
}

@Async
public void printWithArg(int i) throws Exception {
    System.out.println("execute printWithArg(" + i + ") of AsyncPrintTask at " 
        + new Date());
    Thread.sleep(5000);
}

@Async
public Future<String> returnVal(int i) throws Exception {
    System.out.println("execute returnVal() of AsyncPrintTask");
    Date current = new Date();
    Thread.sleep(5000);
    return new AsyncResult<String>(Integer.toString(i));
}

이상 실행 후 확인해보면 scheduler가 돌아가는 것을 보실 수 있습니다.

참조 URL : http://dev.anyframejava.org/docs/anyframe/plugin/scheduling/4.5.2/reference/html/ch02.html

by rocksea.


'Developer' 카테고리의 다른 글

[ shell ] rows sum script  (0) 2013.02.15
[samba] 간단 samba 설치  (0) 2013.02.12
[Transaction] DB Transaction 설정  (0) 2013.01.31
[jQuery] image slider  (0) 2013.01.23
[jQuery] event로 화면제어  (0) 2013.01.23
댓글